求神人给答复 关于运算符重载的问题
#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