首先明确:
① 派生方式存在的意义就是“修改现有成员的(被)访问权限”
② 虽然都是“公有、私有、保护”,区分开“派生方式(XX派生)”和“成员属性(XX成员)”。
③ 无论什么派生方式,最后实际发挥作用都要“落到“产生的具体成员属性上(即:实际发挥作用的都是具体的成员类型)
④ 某个类派生(继承)过程中,任何函数对该类的某个成员的访问权限,只由:(被访问的)成员本身属性+“派生规则” 决定,即:函数位于什么位置(内部、外部 or 派生类新生成) 基于“派生规则”来判断对于某个成员的访问权限。
⑤“派生”和“继承”指的是同一个过程,只是 前者从基类角度讲的,后者从派生类角度讲的。
“派生规则”即:
①外部函数能否访问派生类某成员,看的是派生结束之后按照 派生方式+新定义的派生类成员属性 生成了所有的成员之后,按照成员属性来确定访问权限。
②派生类新定义的成员函数能否访问派生类某成员,只看原先该被访问成员在基类中是 公有or私有成员。
③继承来的成员函数还是能自由访问继承来的所有成员(不管什么属性)。【与派生无关,是遵从"同类成员可访问彼此任意属性的成员"的原则】
由于派生类中的成员函数(新定义or重载重写)能否访问基类成员,只根据“待访问成员原先在基类中的属性(私有or保护or公有)”,和派生方式无关。(“派生规则”②)
而外部函数能否访问派生类中的成员,则是根据“某种派生方式下得到的派生类”中的成员属性(私有or保护or公有),和派生方式有关。(“派生规则”①)因此研究派生方式,只需要看“对于 外部函数访问权限的影响”。
但在学习过程中,发现protected派生和private派生得到的结果,对于外部函数而言,基类中继承的成员都是不可访问的。简言之:这两种不同派生方式所得到的派生类访问权限完全等效。
是否说明,protected派生和private派生功能重叠?
事实上,对于单次继承,这两个派生完全等效,没问题。但如果涉及多层继承,这两种派生方式所得的结果肯定有区别(所产生的派生类的某些成员,属于protected or private)。因此 当且仅当 这两种不同的派生方式所得到的继承类,之后又作为基类来派生的时候,才能体现出之前这两种派生方式的差异。