【发布时间】:2025-12-09 20:25:01
【问题描述】:
我有以下构成多级继承模型的类。
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()(叶节点)构造函数时,它会委托调用其父类构造函数CavTest()。 CavTest() 构造函数被声明为显式调用其父 NpBaseTest() 构造函数。那么,当调用CavTest() 构造函数应该为我做这件事时,为什么我需要从CavPkoTest() 显式调用NpBaseTest() 构造函数呢?
如果我将CavPkoTest() 构造函数声明为:
class CavPkoTest : virtual public CavTest
{
public:
CavPkoTest() : CavTest{CAV_TEST_ID_PKO} {}
}
仅供参考:CavTest 和 NpBaseTest 类都是抽象基类,因为它们具有 1+ 个纯虚成员函数(由 CavPkoTest 类实现)
【问题讨论】:
-
所有虚拟基地都被认为是直接基地。您必须从任何级别的任何后代调用它们的构造函数,而不仅仅是直接子代。
标签: c++ inheritance multiple-inheritance