1.友元
1.定义为谁友元,就在谁的类中用关键字friend声明其要定义的友元。
2.一些函数不是类的一部分,但又频繁访问类的数据成员,此时可定义为友元函数,也可定义友元类。
3.友元只能发生在异类之间,同类之间无隐私。
4.作用:提高程序的运行效率,但破坏了类之间的封装和隐藏性,使得非成员函数可以访问类的私有成员
5.友元目的本质:不让其他不属于本类的成员,成为类的成员而具有本类成员的属性。
6.声明为谁的友元,就能通过其对象访问其私有成员【把a定义为b的友元,则可通过b的对象访问b的私有成员】
7.友元函数无this指针
8.注意事项:
1.友元关系不能被继承。
2.友元关系是单向的不具有交换性。【a是b的友元,b不是a的友元】
3.友元关系不具有传递性。【c是b的友元,b是a的友元,但c不是a的友元】
2.在定义友元函数时,用前向声明。
前向声明:是一种不完全声明,即只需提供类名(无需提供类实现)。但存在限制:
1.不能定义类的对象
2.可以用于定义指向这个类型的指针或引用
3.用于声明(不是定义)使用该类型,作为形参类型或函数返回类型。
友元函数的实现过程:
若将一个类(a)的函数声明为另一个类(b)的友元函数,则类a放在类b前面定义,且将类b进行前向声明,而若友元函数中有对类b中的成员操作,则函数只能在类a中声明,其实现在类b定义之后。
友元类的实现:友元类只需在类中声明即可。其类中的所有的函数都为友元函数。
来源:https://www.cnblogs.com/Sayer/p/5350441.html