私は、以下のクラスを持っていて、複数レベルの継承モデルを形成しています。複数レベルの継承とC++の呼び出し基本コンストラクタ
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()
コンストラクタへの呼び出しが私のためにそれを行うべきである場合、なぜからNpBaseTest()
コンストラクタを明示的に呼び出す必要がありますか?
IとしてCavPkoTest()
コンストラクタを宣言する場合:
class CavPkoTest : virtual public CavTest
{
public:
CavPkoTest() : CavTest{CAV_TEST_ID_PKO} {}
}
FYI:それらは(CavPkoTest
クラスによって実装される)1+純粋仮想メンバ関数
すべての仮想ベースは即時ベースとみなされます。直接の子どもだけでなく、どのレベルの子孫からでもコンストラクタを呼び出さなければなりません。 –