首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求解释,关于默认赋值运算符函数的有关问题

2013-04-20 
求解释,关于默认赋值运算符函数的问题#includeiostreamusing namespace stdclass complex{private:int

求解释,关于默认赋值运算符函数的问题
#include<iostream>
using namespace std;
class complex{
private:
int real,imag;
public:
complex(){}             
complex(int r,int i)
{
real=r;imag=i;
}
complex(int i)
{
real=imag=i/2;
}
operator int()
{
return real+imag;
}
void print()
{
cout<<"real:"<<real<<"\t"<<"imag:"<<imag<<endl;
}
};
int main()
{
complex a1(1,2),a2(3,4);
complex a3;
a3=a1+a2;
a3.print();
system("pause");
return 0;
}

这段程序可以执行,且没有问题。
但如果把上面的complex(){}   这一段注释掉,而将 complex(int r,int i)
改为complex(int r=0,int i=0)   则会出现错误。
如果注释掉complex(){}    且将complex(int i)改为complex(int i=0)
则不会出现错误。
求解释,这两种构造函数对上面的a3=a1+a2有什么不同的影响吗?



          类 ?赋值运算符?
[解决办法]
主要是 operator int 闹的。a1+a2; 都是转化为 int 后才参加加法运算的,然后结果就是个 int,不过左侧是 a3,是个 complex,编译器需要从 int 构造一个 complex。complex(int r=0,int i=0) 的时候存在两个构造函数都能够从一个 int 构造 complex,因此调用存在二义性,所以错误;而 complex(int i=0) 时却只有它能够完成 int 到 complex 的构造任务,因为另一个构造函数必须要求两个参数。

ps. 最好的方案就是老老实实重载 operator +,不要依赖于 operator int 的转换。

热点排行