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

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

2012-10-19 
求神人给答复关于运算符重载的问题#includeiostream//using namespacestdclass Complex{double realdo

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

热点排行