对象引用

来源:百度知道 编辑:UC知道 时间:2024/07/08 15:03:52
#include <iostream.h>
class Complex
{public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator + (Complex &c2);//1、声明时使用了对象引用
friend ostream& operator << (ostream&,Complex&);//2、声明时使用了对象的引用;3、函数类型为对象引用
private:
double real;
double imag;
};
Complex Complex::operator + (Complex& c2)//4、定义时使用了对象引用
{return Complex(real+c2.real,imag+c2.imag);}

ostream& operator << (ostream& output,Complex& c)//5、定义时使用了对象引用。6、函数类型为对象引用
{output<<"("<<c.real<<"+"<<c.imag<<"i"<<")"<<endl;
return output;
}

int main()
{Complex c1(2,4),c2(6,10),c3;
c3=c1+c2;
cout<<"c1="<<c1<<"c2="<<c2<<"c3=c1+c2="<<c3;
system("pause");
return 0;
}

运算符重载函数中的形参都应该是引用,这是规定.
至于函数类型其实就是返回值类型,具体是饮用还是数值要看具体情况:总的来说要保证你重载的运算符和已经存在的运算符在使用语境上没有区别 举两个例子
一般返回值还要继续被处理的情况 返回引用 比如+=运算符可以这样用
a += b += c;
那么+=就应该返回自身的引用 通常是 return *this;
返回值用过就丢弃的应该返回 值类型 比如+运算一般这样用
a = (b + c) * d;
这里b+c的值在运算之后就丢弃了 所以返回值类型 通常是return ClassA(result_of_operation);

运算符重载是个比较麻烦的东西 但是Effective C++里面讲的很清楚 你应该仔细看看那本书

不要急先,应该还是刚开始学C++吧
C++东西确实蛮多的,要一个一个地学
Effective C++是必须要看的,但现在重要的是读完一本普通C++教材