一般情况下,将运算符重载为类的成员函数是较好的选择。但有时,重载为成员函数不能满足使用要求,重载为全局函数又不能访问类的私有成员,因此需要将运算符重载为友元。
例如,对于复数类 Complex 的对象,希望它能够和整型以及实数型数据做四则运算,假设 c 是 Complex 对象,希望c+5
和5+c
这两个表达式都能解释得通。
将+重载为 Complex 类的成员函数能解释c+5
,但是无法解释5+c
。要让5+c
有意义,则应对+进行再次重载,将其重载为一个全局函数。为了使该全局函数能访问 Complex 对象的私有成员,就应该将其声明为 Complex 类的友元。具体写法如下:
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); }; Complex Complex::operator + (double r) { //能解释c+5 return Complex(real+r, imag); } Complex operator + (double r, const Complex & c) { //能解释5+c return Complex (c.real+r, c.imag); }
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/21541.html