#include<iostream.h>// c++6.0不支持把成员函数重载为友元函数,,所以用带。h的库 class Complex { int real; int imag; public: Complex(int a,int b):real(a),imag(b){} Complex(){}; Complex(int a){real=a;imag=0;} void display(); friend Complex operator +(Complex &c1,Complex &c2); }; Complex operator+(Complex&c1,Complex&c2) { return Complex(c1.real+c2.real,c1.imag+c2.imag);//注意返回带Cmplex } void Complex::display() { cout<<real<<'+'<<imag<<'i'<<endl; } int main() { Complex c1(1,5),c2(3,7),c3;int a=2; c3=c1+a; cout<<"c3="<<endl; c3.display(); return 0; } 我已经定义了转换构造函数,为什么c1+a会出错 为什么在complex&c1,Complex&c2)中加const就没问题啦求大神求解决,谢谢啦! {
3 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
c3 = c1 + Complex(a);这样就行了吧,你的构造没有定义复数与int相加
再说的+运算符重载这样写不就行了
Complex operator+(Complex&c1)
{
return Complex(c1.real + real, c1.imag + imag);
};
临摹微笑
TA贡献1982条经验 获得超2个赞
这个问题挺有意思。
我认为形参不加const,将调用形参的拷贝构造函数先复制一个对象出来,而Complex类没有拷贝构造函数也不会接受int型的参数,所以编译报错。
加const后,函数不会复制实参,在调试过程中发现调用了Complex(int a)这个构造函数,我猜想可能编译器在这个时候做了个隐含的类型转换吧,c3=c1+a;估计就变成了c3=c1+(Complex)a;
添加回答
举报
0/150
提交
取消