C++笔记: 继承,友元

//---(一)友元关系----------

友元关系不可继承,Base是基类,Derive是派生类,F是Base的友元, 这么说来, "F不能访问Derive的private成员"是无误的;

但是还是不够准确,假设Base有一个privata的virtual函数func(),Derive继承并重写了此函数,那么在基类的友元F中有如下代码:


看似F通过Base*指针绕过了检查, 并由虚函数表找到了Derive::func(), 是不是想到了"友元破坏封装"这句话?

与其把友元看作"破坏封装"的罪魁祸首, 不如把这种机制称为"基类的对外接口", 只要基类提供了这样一个接口:通过此接口我们可以间接访问基类的私有成员, 这个"接口"可以是一个public函数,也可以是一种"友元关系", 正是通过这个"友元关系"接口, 派生类中的私有成员可以被间接访问了;

 

 

 

//---(二)private继承----------

 

 

以上方式3中的P4指针仍可正常访问virtual table内的函数;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值