C++之继承方式
C++继承的一般语法为:
class 派生类名:[继承方式] 基类名{ 派生类新增加的成员 };
public、protected、private 修饰类的成员
继承方式限定了基类成员在派生类中访问权限,包括public,private,protected。这是个可选项,如若不指定,则默认为private(成员变量和成员函数默认也是 private)。
类的成员访问权限依次是public->protected->private。public可通过对象来访问,private不可以。
protected与private类似,也不可以通过对象访问。但是当存在继承关系时,protected 和 private 就不一样了:基类中的 protected 成员可以在派生类中使用,而基类中的 private 成员不能在派生类中使用。
public、protected、private 指定继承方式
不同的继承方式会影响基类成员在派生类中的访问权限。
public方式:
基类所有的public成员在派生类中是public属性
基类所有的protetcd成员在派生类中是protected属性
基类所有的private成员在派生类中是private属性
protected方式:
基类所有的public成员在派生类中是protected属性
基类所有的protetcd成员在派生类中是protected属性
基类所有的private成员在派生类中不可使用
private方式:
基类所有的public成员在派生类中是private属性
基类所有的protetcd成员在派生类中是private属性
基类所有的private成员在派生类中不可使用
分析:
1)基类成员在派生类中访问权限不得高于继承方式中指定的权限。例如,当继承方式为protected时,那么基类成员在派生类中的访问最高权限最高也为priotected,高于protected的会降级为protected,但低于protected不会升级。再例如,当继承方式为public时,那么基类成员在派生类中的访问权限将保持不变。
也就是说,继承方式中的public,protected,private是用来指明基类成员在派生类中最高访问权限的。
2)不管继承方式如何,基类中private成员在派生类始终不能使用。
3)如果希望基类的成员能够被派生类继承并且毫无障碍的使用,那么成员只能声明为public或protected。只有那些不希望在派生类中使用的成员才声明为private。
4)如果希望基类的成员既不向外暴露(不能通过对象访问),还能再派生类中使用,那么只能声明为protected。
由于 private 和 protected 继承方式会改变基类成员在派生类中的访问权限,导致继承关系复杂,所以实际开发中我们一般使用 public。
改变访问权限
使用using关键字可以改变基类成员再派生类中的访问权限。例如将public改为private,将protected改为public。
注意,using只能改变基类成员中的public和protected成员的访问权限,不能改变private成员的访问权限,因为基类的private成员再派生类中是不可见的,根本不可能使用,所以基类的private成员再派生类中无论如何都不可能访问。
浙公网安备 33010602011771号