一般将运算符重载为类的成员函数,重载为友元函数的情况:1.成员函数不能满足使用要求;2.普通函数不能访问类的私有成员。
将运算符重载为成员函数的情况:
class Complex
{
double real, imag;
public:
Complex(double r, double i):real(r),imag(i){}
Complex operator+(double r);
};
Complex Complex::opeartor+(double r) //可以解释c+5
{
return Complex(real + r, imag);
}
经过上述重载后:
Complex c;
c = c+5; //运行正确,相当于c = c.operator+(5);
但是:
c = 5 + c; //编译出错
因此需要将+重载为普通函数
Complex operator+(double r, const Complex& c)
{
return Complex(c.real+r, c.imag);
}
普通函数不能访问私有成员,因此将运算符+重载为友元函数,在类定义中声明。
class Complex{
double real, imag;
public:
Complex(double r, double i):real(r),imag(i){}
Complex operator+(double r);
friend Complex operator+ (double r, const Complex&c);
};