| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 554 人关注过本帖
标题:运算符重载的问题
只看楼主 加入收藏
longmengyl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-9-13
收藏
 问题点数:0 回复次数:5 
运算符重载的问题
请问下面的程序错在哪里?我在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;


}
搜索更多相关主题的帖子: 重载 运算符 
2009-09-18 13:03
kxalpah
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:21
专家分:124
注 册:2009-9-14
收藏
得分:0 
请更换编译器再试一次,我用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;
}
2009-09-18 13:45
longmengyl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-9-13
收藏
得分:0 
回复 2楼 kxalpah
谢谢高手指点,我是在VC++6.0上运行的,老是出错,我是菜鸟,怎么都搞不好!
2009-09-19 10:21
longmengyl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-9-13
收藏
得分:0 
回复 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;


}
2009-09-19 10:38
gz81
Rank: 5Rank: 5
等 级:职业侠客
帖 子:137
专家分:369
注 册:2008-5-1
收藏
得分:0 
没仔细看,我只修改了几个符号,在我这里可以正常运行。

#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

我的空间:http://student./space.php?uid=116706
2009-09-20 16:20
longmengyl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-9-13
收藏
得分:0 
回复 5楼 gz81
谢谢你的指点,但是我想问的是这个程序和上面问题上的函数有什么优劣之分吗?
两个程序的compare函数是不一样的
2009-09-21 12:47
快速回复:运算符重载的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037479 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved