友元在运算符重载中的作用
友元在运算符重载中的作用
运算符重载作为成员函数时会遇到的问题
当我们面对以下的重载的乘法运算符时:
className operator*(double n) const;
我们可以发现该方法的调用是存在限制的。由于运算符的左侧操作数是调用对象所以:
A = A * 2.5;
可以转换成
A = A.operator*(2.5);
但是对于以下语句则是不可以的:
A = 2.5 * A;
为了解决这个问题,可以添加非成员函数
className operator* (double n, const className & t);
A = operator* (2.5, A);
显然非成员函数无法访问类的私有数据,为了解决这个新的问题,引入友元函数。
友元函数
创建友元函数只需要将非成员函数放在类中,并加上关键字friend:
friend className operator* (double n, const className & t);
这意味着:
- operator函数不是成员函数,所以不能用成员运算符::来调用;
- operator函数的访问权限和成员函数相同。
在编写函数实现的时候,不需要加上className::。
浙公网安备 33010602011771号