C++中的多级继承和调用基础构造函数

Multiple level of inheritance and calling base constructors in c++

我有以下 class 构成多级继承模型的元素。

class CavPkoTest : virtual public CavTest
{
public:
    CavPkoTest() : CavTest{CAV_TEST_ID_PKO}, NpBaseTest{CAV_TEST_ID_PKO, MODULE_CAV_TEST} {}
}
class CavTest : virtual public NpBaseTest
{
public:
    CavTest(uint16_t p_testId) : NpBaseTest{p_testId, MODULE_CAV_TEST} {}
}

class NpBaseTest
{
    uint16_t m_testId;
    uint16_t m_moduleType;
public:
    NpBaseTest(uint16_t p_testId, uint16_t p_moduleType) : m_testId{p_testId}, m_moduleType{p_moduleType} {}
}

我的问题是,当调用 CavPkoTest()(叶节点)构造函数时,它委托调用其父 class 构造函数 CavTest()CavTest() 构造函数声明为显式调用其父 NpBaseTest() 构造函数。那么,当调用 CavTest() 构造函数应该为我完成时,为什么我需要从 CavPkoTest() 显式调用 NpBaseTest() 构造函数?

如果我将 CavPkoTest() 构造函数声明为:

class CavPkoTest : virtual public CavTest
{
public:
    CavPkoTest() : CavTest{CAV_TEST_ID_PKO} {}
}

仅供参考:CavTestNpBaseTest classes 都是抽象基础 类 因为它们有 1+ 个纯虚拟成员函数(由 CavPkoTest class)

通过虚拟继承,您可以从同一个虚拟基 class.

派生多个基 classes

那个虚拟基地class sub-object 必须只初始化一次。因此,语言规则是派生的 class 必须显式初始化它。

如果基础 classes 初始化 same 虚拟基础 class sub-object,他们最终会初始化它多次.