一.概述
友元关系提供了不同对类或对象的成员函数,类的成员函数与一般函数之间之间进行的数据共享机制。通过友元关系,一个普通函数或者类的成员函数可以访问封装于另外一个类中的数据。利用关键字friend来声明友元关系。
二.类的友元函数
友元函数是在类中用关键字friend声明的非成员函数,友元函数可以是一个普通的函数也可以是其他类的成员函数。
友元函数是一般函数:
friend 类型名 函数名(参数表);
友元函数是另一个类的成员函数:
friend 类型名 另一个类名::函数名(参数表);
计算两点间距离的问题部分代码如下:
class point
{
public:
point(int x,int y):x(x),y(y){}
int getx() {return x;}
int gety() {return y;}
friend float caldist()point& p1,point& p2);//声明友元函数
private:
int x,y;
};
friend caldist(point& p1,point& p2)//友元函数实现
{
float x=p1.x-p2.x;//访问point类的私有成员
float y=p1.y-p2.y;
return sqrt(x*x+y*y);
}
三.友元类
class A
{
friend class B;
}
B类是A类友元,B的成员函数可以访问A类的私有和保护数据。
注意:
1.友元关系不能传递。
2.友元关系是单向的。 如上例,类A的成员函数不能访问B类的私有和保护数据。
3.友元关系不能被继承。 如果类B是类A的友元,类B的派生类并不会自动生成为类A的友元。
注:部分内容参考《c++语言程序设计(第四版)》清华大学出版社