回复 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;
}
楼主不妨复制以上的代码来运行一次
思考赐予新生,时间在于定义