天天看点

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;
}