读书人

求神人给答复 关于运算符重载的有关问

发布时间: 2012-10-19 16:53:36 作者: rapoo

求神人给答复 关于运算符重载的问题
#include<iostream>
//using namespace std;
class Complex
{
double real;
double image;
public:
Complex(double r, double i)//带参数的构造函数
{
real = r;
image = i;
}
Complex()
{
real = 0;
image = 0;
}
void display();
Complex(double h);//转换构造函数
friend Complex operator + (Complex c1, Complex c2);//成员函数

};
Complex::Complex(double r)
{
real = r;
image = 0;
}
void Complex::display()
{
std::cout<<real<<"+ "<<image<<"i"<<std::endl;
}
Complex operator + (Complex c1,Complex c2)
{
Complex c;
c.real = c1.real + c2.real;
c.image = c1.image + c2.image;
return c;
}
int main()
{
double p = 5;
Complex c1(1,2),c2(3,-4),c3;
c3 = c1 + 4.2;
c3.display();

}
为什么把重载函数的参数改为 引用就会报错
error C2679: binary '+' : no operator defined which takes a right-hand operand of type 'const double' (or there is no acceptable conversion)
求神人给答复啊 非常感谢

[解决办法]
GCC编译成功,结果为5.2+ 2i。
[解决办法]
c3 = c1 + 4.2;

中的const int 4.2会被

Complex::Complex( double )

implicitly构造成一个const Complex,一个const Complex的object是不能交给一个

Complex&

的,因为reference可能会改变对象本身。但

Complex
const Complex&

都是可以的——二者都不会改变const Complex本身。
[解决办法]
sorry,上面的应该是const double 4.2

读书人网 >C++

热点推荐