cpp中protected保护派生和private私有派生在实际效果上是否“等效”

首先明确:

① 派生方式存在的意义就是“修改现有成员的(被)访问权限

② 虽然都是“公有、私有、保护”,区分开“派生方式(XX派生)”和“成员属性(XX成员)”。

③ 无论什么派生方式,最后实际发挥作用都要“落到“产生的具体成员属性上(即:实际发挥作用的都是具体的成员类型)

④ 某个类派生(继承)过程中,任何函数对该类的某个成员的访问权限,只由:(被访问的)成员本身属性+“派生规则” 决定,即:函数位于什么位置(内部、外部 or 派生类新生成) 基于“派生规则”来判断对于某个成员的访问权限。

⑤“派生”和“继承”指的是同一个过程,只是 前者从基类角度讲的,后者从派生类角度讲的。

“派生规则”即:

外部函数能否访问派生类某成员,看的是派生结束之后按照 派生方式+新定义的派生类成员属性 生成了所有的成员之后,按照成员属性来确定访问权限。

派生类新定义的成员函数能否访问派生类某成员,只看原先该被访问成员在基类中是 公有or私有成员。

继承来的成员函数还是能自由访问继承来的所有成员(不管什么属性)。【与派生无关,是遵从"同类成员可访问彼此任意属性的成员"的原则】

由于派生类中的成员函数(新定义or重载重写)能否访问基类成员,只根据“待访问成员原先在基类中的属性(私有or保护or公有)”,和派生方式无关。(“派生规则”②

而外部函数能否访问派生类中的成员,则是根据“某种派生方式下得到的派生类”中的成员属性(私有or保护or公有),和派生方式有关。(“派生规则”①)因此研究派生方式,只需要看“对于 外部函数访问权限的影响”。

但在学习过程中,发现protected派生和private派生得到的结果,对于外部函数而言,基类中继承的成员都是不可访问的。简言之:这两种不同派生方式所得到的派生类访问权限完全等效。

是否说明,protected派生和private派生功能重叠?

事实上,对于单次继承,这两个派生完全等效,没问题。但如果涉及多层继承,这两种派生方式所得的结果肯定有区别(所产生的派生类的某些成员,属于protected or private)。因此 当且仅当 这两种不同的派生方式所得到的继承类,之后又作为基类来派生的时候,才能体现出之前这两种派生方式的差异。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值