C++之友元
一、友元函数
分为友元全局函数和友元成员函数。
1.友元全局函数
2.友元成员函数
3.补充说明
<1> 友元带来方便的同时也带来了风险,比如破坏类的封装性,除非有特殊需要,否则一般情况下不建议处处使用友元。
<2> 友元函数可以存取私有成员、公有成员和保护成员,即可以出现在类的任何部分。(但建议将其写在类的最前边)
friend关键字与访问限定符public、private、protected并不形成交叉关系,也即它们并不构成约束,所以友元函数的声明可以写在类的任何位置,但建议写在类的最前面。
【因为作为一个类来说,它对外如何进行暴露是非常重要的,把重要的信息放在前面有助于编程过程中减小犯错的概率】
<3> 使用友元成员函数时注意不要将头文件互相包含,会造成死循环。
例:类2的某成员函数是类1的友元函数
可以在类1(被访问私有成员的类)的头文件中包含定义了友元成员函数的类2头文件,然后在类2头文件中“class 类1;”即前置声明类1,再在类2的cpp中包含类1头文件,以具体实现友元成员函数
-------类1.h-------
#include "类2.h"
class 类1
{
friend void 类2::f(类1 &);
};
-------类1.h-------
-------类2.h-------
class 类1;
class 类2
{
void f(类1 &);
};
-------类2.h-------
-------类2.cpp-------
#include "类1.h"
void 类2::f(类1 &)
{
}
-------类2.cpp-------
二、友元类
三、友元注意事项