回顾cpp-继承-二

  • 继承方式 check
  • 隐藏 check
  • 多继承 check
  • 多重继承 check
  • 虚继承 check

多继承

类间关系是

一个子类由多个不同的父类:可飞行 <- 蝙蝠,哺乳动物 <- 蝙蝠,蝙蝠 Is-a 可飞行,同时 Is-a 哺乳动物。而可飞行与哺乳动物没有任何关系。具体实现可以是这样:

1
2
3
class Flyable{};
class Mammal{};
class Bat : public Flyable, public Mammal{};

实例化一个Bat子类时,会先调用其所有的父类构造函数,再调用所有子类构造函数。析构函数会以相反的顺序被调用。

多重继承

类间关系是

Human被Asion继承,Asion被Chinese继承:Human <- Asion <- Chinese,三者由一下关系:Chinese Is-a Asion,Chinese Is-a Human,AsionIs-a Human。具体实现可以是这样:

1
2
3
class Human{};
class Asion : public Human{};
class Chinese : public Asion{};

虚继承

复杂的继承关系,如菱形继承:

为什么会有虚继承。因为在继承过程中,为了避免MigrantWorker继承两次Person,使用virtual关键字,实现如下:

1
2
3
4
class Person {};
class Worker : virtual public Person {};
class Farmer : virtual public Person {};
class MigrantWoker : public Worker, public Farmer {};

敲黑板为避免重复继承,使用虚继承virtual