友元
大约 1 分钟
友元friend
作用:访问类中的私有成员
友元的形式可以分为友元函数和友元类。
class 类名
{
//...
friend 函数原型;
friend class 类名;
//...
}
形式:
1、友元之普通函数
2、友元之成员函数
3、友元之友元类
友元函数
分为全局函数友元和成员函数友元
float distance(const Point &lhs, const Point &rhs)//全局函数
{
return hypot(lhs._ix - rhs._ix, lhs._iy - rhs._iy);
}
class Line
{
public:
float distance(const Point &lhs, const Point &rhs)//成员函数
{
return hypot(lhs._ix - rhs._ix, lhs._iy - rhs._iy);
}
};
class Point
{
public:
Point(int ix = 0, int iy = 0)
: _ix(ix)
, _iy(iy)
{
}
void print() const
{
cout << "(" << _ix
<< "," << _iy
<< ")";
}
friend float distance(const Point &lhs, const Point &rhs);//全局函数
friend float Line::distance(const Point &lhs, const Point &rhs);//成员函数
private:
int _ix;
int _iy;
};
友元类
多个函数访问类的私有成员,一个个写成友元函数麻烦,可以封装一个友元类
class Point
{
//...
friend class Line;
//...
};
友元的性质
友元关系是单向的、没有传递性(A->B->C)、不能被继承
友元的声明是不受public/protected/private访问关键字限制的。