注册 登录
编程论坛 C++教室

运算符重载的问题

longmengyl 发布于 2009-09-18 13:03, 556 次点击
请问下面的程序错在哪里?我在VC++上运行时说运算符重载函数调用不了私有成员,但是不是声明了友元函数了吗?到底怎么回事啊?请高手指点下
#include <iostream>
#include <string>
using namespace std;
class String
{
public:
    String(){p=NULL;}
    String(char *str);
    friend bool operator > (String &string1,String &string2);
    friend bool operator < (String &string1,String &string2);
    friend bool operator == (String &string1,String &string2);
    friend void compare(String &string1,String &string2);
    void display();
private:
    char * p;
};
String::String(char * str)
{
    p=str;
}
void String::display()
{
    cout<<p;
}
bool operator >(String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)>0)
        return true;
    else
        return false;
}
bool operator < (String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)<0)
        return true;
    else
        return false;
}
bool operator == (String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)==0)
        return true;
    else
        return false;
}
void compare(String &string1,String &string2)
{
    if((string1.p>string2.p)==1)
    {
        string1.display();cout<<">";string2.display();
    }
    else
        if((string1.p<string2.p)==1)
        {
            string1.display();cout"<";string2.display();
        }
        else
            if(string1.p==string2.p)==1)
            {
                string1.display();cout"=";string2.display();
            }
            cout<<endl;
}
int main()
{
    String string1("Hello"),string2("Book"),string3("Computer"),string4("Helle");
    compare(string1,string2);
    compare(string2,string3);
    compare(string3,string4);
    return 0;


}
5 回复
#2
kxalpah2009-09-18 13:45
请更换编译器再试一次,我用vc++没通过,但是vs2008通过了,不过compare函数有问题,改成下面就行了
void compare(String &string1,String &string2)
{
    if(string1>string2)
    {
        string1.display();cout<<">";string2.display();
    }
    else
        if(string1<string2)
        {
            string1.display();cout    <<     "<";string2.display();
        }
        else
            if(string1==string2)
            {
                string1.display();cout  <<     "=";string2.display();
            }
            cout<<endl;
}
#3
longmengyl2009-09-19 10:21
回复 2楼 kxalpah
谢谢高手指点,我是在VC++6.0上运行的,老是出错,我是菜鸟,怎么都搞不好!
#4
longmengyl2009-09-19 10:38
回复 2楼 kxalpah
这个程序是我在书上抄来的,做了下改动,高手帮忙看看原程序好在哪里可以吗?
#include <iostream>
#include <string>
using namespace std;
class String
{
public:
    String(){p=NULL;}
    String(char *str);
    friend bool operator > (String &string1,String &string2);
    friend bool operator < (String &string1,String &string2);
    friend bool operator == (String &string1,String &string2);
    void display();
private:
    char * p;
};
String::String(char * str)
{
    p=str;
}
void String::display()
{
    cout<<p;
}
bool operator >(String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)>0)
        return true;
    else
        return false;
}
bool operator < (String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)<0)
        return true;
    else
        return false;
}
bool operator == (String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)==0)
        return true;
    else
        return false;
}
void compare(String &string1,String &string2)
{
    if(operator > (string1,string2)==1)
    {
        string1.display();cout<<">";string2.display();
    }
    else
        if(operator < (string1,string2)==1)
        {
            string1.display();cout"<";string2.display();
        }
        else
            if(operator == (string1,string2)==1)
            {
                string1.display();cout"=";string2.display();
            }
            cout<<endl;
}
int main()
{
    String string1("Hello"),string2("Book"),string3("Computer"),string4("Helle");
    compare(string1,string2);
    compare(string2,string3);
    compare(string3,string4);
    return 0;


}
#5
gz812009-09-20 16:20
没仔细看,我只修改了几个符号,在我这里可以正常运行。

#include <iostream>
#include <string>
using namespace std;
class String  
{
public:
    String(){p=NULL;}
    String(char *str);
    friend bool operator > (String &string1,String &string2);
    friend bool operator < (String &string1,String &string2);
    friend bool operator == (String &string1,String &string2);
    void display();
private:
    char * p;
};
 
String::String(char * str)
{
    p=str;
}
void String::display()
{
    cout<<p;
}
bool operator >(String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)>0)
        return true;
    else
        return false;
}
bool operator < (String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)<0)
        return true;
    else
        return false;
}
bool operator == (String &string1,String &string2)
{
    if(strcmp(string1.p,string2.p)==0)
        return true;
    else
        return false;
}
void compare(String &string1,String &string2)
{
    if (operator > (string1,string2)==1)
    {
        string1.display();cout<<">";string2.display();
    }
    else
        if (operator < (string1,string2)==1)
        {
            string1.display();cout<<"<";string2.display();
        }
        else
            if (operator == (string1,string2)==1)
            {
                string1.display();cout<<"=";string2.display();
            }
            cout<<endl;
}
int main()
{
    String string1("Hello"),string2("Book"),string3("Computer"),string4("Helle");
    compare(string1,string2);
    compare(string2,string3);
    compare(string3,string4);
    return 0;
 
 
}



输出结果:
Hello>Book
Book<Computer
Computer<Helle
#6
longmengyl2009-09-21 12:47
回复 5楼 gz81
谢谢你的指点,但是我想问的是这个程序和上面问题上的函数有什么优劣之分吗?
两个程序的compare函数是不一样的
1