公有继承(public)、保护继承(protected)、私有继承(private)是常用的三种继承方式,除了这些继承类型外还有一种虚拟继承。
-
公有继承(public)
公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,即基类的公有成员在派生类中还是公有成员,基类的保护成员在派生类中还是保护成员,而基类的私有成员仍然是私有的,不能被派生类及派生类的子类所访问。
-
保护继承(protected)
保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,也可被派生类的子类访问,基类的私有成员仍然是私有的,不可被派生类及派生类的子类访问。
-
私有继承(private)
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,只可以被派生类访问,但是不能被这个派生类的子类所访问。
-
虚拟继承(virtual)
虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类,虚拟继承与变量的可见性关系不大,在此不做讨论。
访问可见性
各种继承的成员对于派生类和全局函数而言,可见性如下,其中“public继承的派生类中”,指的是以public类型从基类继承出的派生类中对于基类中的各种成员的可访问性,“public继承的派生类的对象”指的是以public类型从基类继承出的派生类的对象在全局函数(例如main函数)中对于基类中成员的可访问性。
可见性 | public | protected | private |
---|---|---|---|
基类中 | public | protected | private |
public继承的派生类中 | public | protected | private |
protected继承的派生类中 | protected | protected | 不可见 |
private继承的派生类中 | private | private | 不可见 |
public继承的派生类的对象 | public | 不可见 | 不可见 |
protected继承的派生类的对象 | 不可见 | 不可见 | 不可见 |
private继承的派生类的对象 | 不可见 | 不可见 | 不可见 |