- 继承方式 check
- 隐藏 check
- 多继承 check
- 多重继承 check
- 虚继承 check
多继承
类间关系是树
。
一个子类由多个不同的父类:可飞行 <- 蝙蝠,哺乳动物 <- 蝙蝠
,蝙蝠 Is-a
可飞行,同时 Is-a
哺乳动物。而可飞行与哺乳动物没有任何关系。具体实现可以是这样:
1 | class Flyable{}; |
实例化一个Bat
子类时,会先调用其所有的父类构造函数,再调用所有子类构造函数。析构函数会以相反的顺序被调用。
多重继承
类间关系是串
。
Human被Asion继承,Asion被Chinese继承:Human <- Asion <- Chinese
,三者由一下关系:Chinese Is-a
Asion,Chinese Is-a
Human,AsionIs-a
Human。具体实现可以是这样:
1 | class Human{}; |
虚继承
复杂的继承关系,如菱形继承:
为什么会有虚继承。因为在继承过程中,为了避免MigrantWorker
继承两次Person
,使用virtual
关键字,实现如下:
1 | class Person {}; |
敲黑板为避免重复继承,使用虚继承virtual
。