不同的继承方式,主要区别在于基类中不同访问权限的成员在派生类中的访问权限变化情况。下面一一介绍。
- 公有继承:
在公有继承的模式下,其特点如下:
(1)基类中的公有成员,在派生类中仍然为公有成员,当然无论派生里的成员函数还是派生类对象都可以访问。
(2)基类中的私有成员,无论在派生类的成员还是派生类对象都不可以访问。
(3)基类中的保护成员,在派生类中仍然是保护类型,可以通过派生类的成员函数访问,但派生类对象不可以访问。
- 私有继承:
在私有继承的情况下,公有类型、私有类型、受保护类型三种成员的访问权限如下:
(1)基类的公有和受保护类型,被派生类私有继承吸收后,都变为派生类的私有类型,即在类的成员函数里可以访问,不能在类外访问。
(2)而基类的私有成员,在派生类无论类内还是类外都不可以访问。
我们可以看出来,如果为私有派生,则基类的私有成员在派生类甚至再派生出的子类中,都无法再使用,没有什么存在意义,故这种使用情况比较少。
- 保护继承:
保护类型的继承,特点如下:
(1)基类的公有成员和保护类型成员在派生类中为保护成员。
(2)基类的私有成员在派生类中不能被直接访问。
可以看的出来,派生类里的成员函数可以访问基类的公有成员和保护成员,但在类外通过派生类对象则无法访问它们。同样,无论派生类里的成员函数还是通过类对象都无法访问基类中的私有成员。
总结:
-
基类私有成员,无论什么派生权限,派生类内成员函数和类外都是不可以访问的。
-
私有继承,无论基类原来什么类型,在派生类外通过成员函数都不可以访问。
-
派生类从基类中吸收的成员的访问权限为基类中访问权限和派生时派生权限两者之中最低的一种。
原文:https://www.dotcpp.com/course/75