Lesson 14 友元机制

protected: 与private:在类内的成员是可以访问 的,在类外的成员是不能访问的;

类中声明一个friend函数,则该函数可以访问本类中的protected与private成员;


友元函数:

1. 非成员函数:全局函数

声明在类体内,定义不要加friend;也可以在类体内定义,不要提前声明,被视为全局函数;

一个全局函数可以声明为多个类的友元;

void fun(A& a);

class B; // 提前声明,不能在A中生成对象B,要把B的完整声明放在A之前;也可以把B类放在一个.h文件中,用include 引进B

<span style="font-size:18px;">class A
{</span>
<span style="font-size:18px;">public:</span>
<span style="font-size:18px;"><span>	</span>friend void fun(A& a);
private: 
      int a;
}</span>



2. 成员函数友元: 其它类中的成员函数

类中声明friend关键字,类外定义

<span style="color:#009900;">class B; </span> //A B写在一个文件里时, B类提前声明,A类中只能声明B为的对象指针不能定义B类的实体
class A
{
void fun()  // 或是用B类的引用做形参
{
    B *b;   // 指针   <span style="color:#009900;"> // 在一个类里用到另一个类的指针或是引用,只要声明有这个类即可</span>
    b->prival;
}
}

class B
{
public:
<span style="white-space:pre">	</span>friend void A::fun(); <span style="color:#009900;"> // 要在一个类里声明另一类的成员函数,要知道另一类的完整声明,即这里A放在B的前面</span>
<span style="color:#009900;"><span style="white-space:pre">		</span>// 所以A类放在B关的前面,或是包含A类的头文件</span>
private:
<span style="white-space:pre">	</span>int prival;

}

1. 要先声明友元函数所在的类,再声明包含friend关键字所在的类

2. 在一个类里只用到另一个类里的引用或是指针,只要声明即可,不要包含头文件.h(效率问题,引用不会开辟内存 空间)


友元类

A类中的成员函数都要访问B类中的非公有成员,可以把A类声明为B类的友元类

class A;

class B

{

friend A;  // A声明为B的友元类 ,A可以调用B类中的私有变量

}


1. 友元类不具有传递性;

2. 友元关系是单向的;

3. 友元不受访问限定符的限制






































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值