| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1360 人关注过本帖
标题:运算符重载问题,看不懂错误提示
只看楼主 加入收藏
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 10楼 唐兵
#include <iostream>
using namespace std;
class Complex
{public:
friend Complex operator + (Complex &c1,Complex &c2);
Complex(double r=0,double i=0){real=r;imag=i;}
double get_real();
double get_imag();
void display();
double real;
double imag;
};
double Complex::get_real()
{return real;}
double Complex::get_imag()
{return imag;}

Complex operator + (Complex &c1,Complex &c2)
{Complex c;
c3.real=c1.get_real()+c2.get_real();
c3.imag=c1.get_imag()+c2.get_imag();
return c ;                         //红色标记的地方出错,对象不一致,你定义了一个临时对象为c,而你表达式里面却用了c3,返回值又用c,这是粗心,直接把c换成c3
}

int main()
{Complex c1(3,4),c2(5,-10),c3;
c3=c1+c2;
cout<<"c3=";
cout<<c3;                        //我不知道楼主你那些代码错误提示是什么意思,我只知道你没有重载输出流,所以不能使用cout<<来直接输出一个对象的数据
return 0;
}
要想直接输出(即cout<<c3),可以在类体内声明一个运算符重载函数,代码如下(包含你之前代码的某些地方修改):
#include <iostream>
 using namespace std;
 class Complex
 {public:
 friend ostream &operator<<(ostream &,const Complex &);  //声明一个友元运算符重载函数,重载"<<",这样就能实现直接使用cout输出一个对象的数据了
 friend Complex operator + (Complex &c1,Complex &c2);
 Complex(double r=0,double i=0){real=r;imag=i;}
 double get_real();
 double get_imag();
 void display();
 double real;
 double imag;
 };
double Complex::get_real()
 {return real;}
 double Complex::get_imag()
 {return imag;}
 ostream &operator<<(ostream &output,const Complex &p)   //定义运算符重载函数
 {
     cout<<"(";
     output<<p.real;
     cout<<",";
     output<<p.imag;
     cout<<")";
     return output;
 }
Complex operator + (Complex &c1,Complex &c2)
 {Complex c3;                              //这两个地方修改了
 c3.real=c1.get_real()+c2.get_real();
 c3.imag=c1.get_imag()+c2.get_imag();
return c3 ;
 }
 int main()
 {Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c4=";
cout<<c3;                //只有添加一个重载“<<”的友元函数,才能实现楼主所说的直接输出一个对象的数据
 return 0;
 }
楼主不妨复制以上的代码来运行一次

思考赐予新生,时间在于定义
2013-06-21 13:55
唐兵
Rank: 2
来 自:四川泸州合江
等 级:论坛游民
帖 子:150
专家分:12
注 册:2012-12-1
收藏
得分:0 
非常感谢你的详细讲解,懂了很多。不过还是有那个问题,应该是编译器的问题,谢了哈

一个人如果不比自己一把,你永远不知道自己究竟有多厉害
2013-06-23 13:58
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 12楼 唐兵
不太清楚楼主所说的那问题,如果是编译器的问题,那不必追究下去了,弄懂这个程序的思想就可以了

思考赐予新生,时间在于定义
2013-06-23 15:42
唐兵
Rank: 2
来 自:四川泸州合江
等 级:论坛游民
帖 子:150
专家分:12
注 册:2012-12-1
收藏
得分:0 
回复 13楼 love云彩
嗯,好

一个人如果不比自己一把,你永远不知道自己究竟有多厉害
2013-06-25 14:57
快速回复:运算符重载问题,看不懂错误提示
数据加载中...
 
   



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

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