c++友元函数定义

定义个Point类

class Point

{

private:

   double x;

   double y;

public:

   Point operator*(const Point& b);

   Point operator*(double m);

}

定义Point对象a, c;

c = a*3.1;这样是正确的,可调用第二个重载函数

c = 3.1*a;这样是错误的,因为重载操作符*左边的是调用对象,但是3.1不是Point对象。

这个时候我们就引入了友元函数,上面的调用可以写成下面的形式:c = operator*(3.1, a), 该函数的原型如下:Point operator*(double m, const Point& b);

有了友元函数,就可以智能识别使用哪一个重载操作。

创建友元函数的第一步是将该函数的原型声明加入到类中,并在前面加上friend关键字:

friend Point operator8(double m, const Point& b);

该原型意味着下面两点:

1.虽然operator*()函数是在类中声明的但是并不是类的成员函数,因此不能使用成员操作符来调用。

2.虽然operator*()函数不是成员函数,但是与成员函数有相同的访问权限。

第二步是编写函数定义。因为他不是成员函数,所以不要使用Point::(类名加作用域解析操作符)限定符。另外不要再定义中使用friend关键字,定义应该如下:

Point operator*(double m, const Point& b)
{
   Point c;
   c.x = b.x * m;
   c.y = b.y * m;
return c;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值