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

 

二、友元类

 

三、友元注意事项

 

 

posted @ 2018-09-19 17:04  eeeeeeee鹅  阅读(252)  评论(0编辑  收藏  举报