友元在运算符重载中的作用

友元在运算符重载中的作用

运算符重载作为成员函数时会遇到的问题

当我们面对以下的重载的乘法运算符时:

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::

posted on 2019-02-27 11:12  Pipipip  阅读(158)  评论(0)    收藏  举报

导航