一、菱形继承

菱形继承结构:
在这里插入图片描述

  • 菱形继承在现实中是存在的,例如人、学生、研究生、在职研究生的关系就是属于菱形继承。
  • 但是明显看出普通的菱形继承结构出现了数据冗余,而虚继承就是解决菱形继承带来的数据冗余问题。

二、虚继承

语法:
class 派生类 :virtual 继承权限 基类;
菱形继承代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Base
{
private:
int top;
};

class Son1 : virtual Base
{
private:
int first;
};

class Son2 : virtual Base
{
private:
int second;
};

class Grandson : public Son1, public Son2
{
private:
int low;
};

虚继承解决数据冗余后的内存结构:

在这里插入图片描述