在多级继承的情况下,无法理解虚基类构造函数

时间:2016-07-20 05:46:10

标签: c++ constructor multiple-inheritance virtual-inheritance

在以下程序中,如果我在Derived类“D”中更改序列,那么我将获得基类构造函数的不同顺序。

ConcurrentHashMap

在虚拟类概念的情况下,请任何人都可以告诉如何调用构造函数。

2 个答案:

答案 0 :(得分:2)

  

在虚拟类概念的情况下,请任何人都可以告诉如何调用构造函数。

根据initialization order,虚拟基类将首先被​​初始化。

  

1)如果构造函数是针对派生程度最高的类的虚拟基础   类按它们出现的顺序初始化   基类深度优先从左到右遍历基类声明   (从左到右指的是基本说明符列表中的外观)

     

2)然后,直接基类按从左到右的顺序初始化为   它们出现在这个类的基本说明符列表中

     

3)然后,按照以下顺序初始化非静态数据成员   类定义中的声明。

     

4)最后,执行构造函数的主体

在所有3个案例中,班级D继承自ABC,其中包含{{1}中的两个虚拟基类} {} D通过AB继承,C通过B继承。 C首先会被初始化,因为它是最基类的,因此对于所有3个案例,AA()将首先打印出来。

之后,直接基类将按从左到右的顺序进行初始化。对于第一种情况,他们将B() A() B(),对于第二种情况,他们将C() B() {{1} },对于第三种情况,他们将C() A() B()

答案 1 :(得分:0)

虚拟基础始终在DFS后期订单中首先初始化。这保证了虚拟A和B基础将首先被初始化,而A在B之前被初始化,因为B是从A得到的。之后,三个非虚拟基数A,B,C按照您的预期简单地按声明顺序初始化。