- 一般情况下,将运算符重载为类的成员函数,是比较好的选择。但是有时,重载为成员函数不能满足使用要求,重载为普通函数又不能访问类的私有成员,所以需要将运算符重载为友元。
比如如果运算符=为成员函数,Complex operator+(double r)
可以计算c=c+5;//相当与c=c.operator+(5);
但是不能计算c=5+c;//编译出错
- 所以,为了使得上述的表达式能成立,需要将+重载为普通函数。 Complex operator+ (double r,const Complex & c) { //能解释5+c return Complex(c.real,c.imag); }
- 但是普通函数又不能访问私有成员,所以,需要将运算符+重载为友元。
class Complex { double real,image; public: Complex(double r,double i):real(r),imag(i){ }; Complex operator+(double r); friend Complex operator + (double r,const Complex & c);//运算符+重载为友元 };