运算符重载为友元函数

  • 一般情况下,将运算符重载为类的成员函数,是比较好的选择。但是有时,重载为成员函数不能满足使用要求,重载为普通函数又不能访问类的私有成员,所以需要将运算符重载为友元。

 比如如果运算符=为成员函数,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);//运算符+重载为友元
    };

     

 

你可能感兴趣的:(C++)