文章目录
- 一、基本概念
- 二、程序举例
- 1. 虚继承
- 2. 内在逻辑
一、基本概念
菱形继承是指存在两个子类继承自同一个基类,同时有子类继承这两个子类。
二、程序举例
1. 虚继承
使用虚继承可以解决菱形继承资源浪费的问题,因为有两个子类继承基类,子类对象调用两个父类作用域下属性时,会发生资源浪费,两个子类分别调用基类的构造函数,生成两份基类所含有的数据成员。用虚继承,只调用一次构造函数和析构,所以避免资源浪费。
#include <iostream>using namespace std;class Person
{
public:int Age;
};class Gril : virtual public Person
{};class Boy : virtual public Person
{};class Child : public Gril, public Boy
{};int main()
{Child A;A.Gril::Age = 5;A.Boy::Age = 10;cout << A.Gril::Age << endl;cout << A.Boy::Age << endl;}
10
10
2. 内在逻辑
可以使用VS的开发者工具解释其内在逻辑。
虚继承时,虚基类指针vbptr指向虚基类表vbtable,虚基类表中存放的就是数据相对于虚基类指针的偏移,然后根据偏移找到数据。