1、为什么需要把需要把运算符重载为友元函数?
运算符重载,如果重载为类的成员函数能解决问题的话最好。但是有些情况下,将运算符重载为成员函数并不能有效的解决问题,这个时候考虑将运算符重载为全局函数。但是将运算符重载为全局函数也有一些不足。遇到这种情况的一种策略就是把运算符重载为友元函数。
Complex x,y;
y=x+5;//情况一
y=5+x;//情况二
- 情况一
这种情况将加号运算符重载为Complex类的成员函数没有问题。x+5等价于x.operator+(5)。 - 情况二
这种情况如果将加号运算符重载为Complex类的成员函数不会发起符号函数的调用,但是如果将加号重载为全局函数,全局函数内部又无法访问到x对象的数据。此时考虑将该全局函数生命为Complex类的友元函数。
2、什么情况下需要将运算符重载为友元函数?
- 情况一
对双目运算符进行的重载,运算符左侧运算对象不能够发起运算符重载函数的调用(左侧运算对象的类型与右侧不匹配,但是定义运算符函数属于右侧类类型的成员函数 ,因此无法发起函数调用。),此时应该重新写一个全局的运算符重载函数,并在该类中将此方法声明为友元函数。 - 其它情况
(遇到后再做记录。)