+,-*,/重载返回值不能用引用? |
在网上看见有网友说重载+,-,*,/时返回值不能为对象的引用,带着深深的疑问自己动手来看了一下,可以呀!不管是成员还是友员重载两者都行,不知道他们是怎么想的,反正我在vc6.0中小试了一下能够通过!以下是用一复数加法运算,代码如下:
#include <iostream.h>
class complex{public: complex(){real=0;image=0;} complex(double r,double i){real=r;image=i;} //friend complex &operator+(complex c1,complex c2); void display(); complex &operator+(complex c1);private: double real,image;};complex co;//全局对象/*complex &operator+(complex c1,complex c2)//友员返回的引用{ co.image=c1.image+c2.image; co.real=c1.real+c2.real; return co;}*/complex &complex::operator +(complex c1)//重载为成员函数引用{ co.real=real+c1.real; co.image=image+c1.image; return co;}
void complex::display(){ cout<<real; if(image>=0)cout<<"+"<<image<<"i"<<endl; else cout<<image<<"i"<<endl;}
int main(){ complex c1(3,4),c2(5,-10),c; c=c1+c2; c.display(); return 0;}
结果:8-6iPress any key to continue
从上可知返回引用是可以的可以的。但是如果用c1+c2=c的放系统不会报错!这个人认为就该是重载=的问题,因为就算不返回引用也上式系统也不会报错的。还有可能VC是不是很支持C++标准的。也许在其它环境下,不能返回对像引用吧! | |
|
|