当有类Base,类Base1继承了Base,Base2也继承了Base,Derived 类多继承了Base1和Base2
也就是呈现如图一种继承关系
如果Base类有一个public的 int a ,在Derived里面要访问这个a,就必须指定是哪个类的a(Base1或者Base2),那就得用作用域符::来指定
如下:
虚基类就是用来解决这个问题
虚基类时这样子来声明:
此时Base类就是Base1的虚基类
将上面的继承关系变成:
此时Derived类继承的a就只有一个,那这一个a是哪一个呢?
其实这个a的值与这些类的构造器有关
我将构造器进行如下的书写:
在这里要补充一下构造器的调用顺序:虚基类->基类->子类
那么下面来分析Derived中的a应该等于多少:
首先,在Base类中定义了int a = 10;
当创建一个Derived对象时,先调用Base的构造器,此时a = a + 1,那就是11,再调用 Base1的构造器 a = a + 10, 此时a = 21, 再调用Base2的构造器, a = a + 20, 此时a = 41,所以Derived类中继承下来的a 就是41
输出一下:确实是41
当然,同理,如果各个类的构造器都没有对a进行处理,那a的值就还是虚基类Base原来的值10