【发布时间】:2021-12-19 17:20:55
【问题描述】:
我有一个从 MyBase 派生的主类 (MyClass)。此外,我还有一个从 HelperBase(由 MyBase 使用)派生的 Helper 类(由 MyClass 使用)。有没有办法在 MyClass 的构造函数初始化中初始化 Helper 并将助手传递给 MyBase ,它将 HelperBase 作为构造函数参数? 如下:
编辑:忘记从 HelperBase 派生 Helper(如 cmets 中所述)修复了示例代码中的问题
//-------------------------------------------
// HelperBase.h
class MyBase;
// HelperBase holds a ref to MyBase
class HelperBase {
public:
HelperBase(MyBase& i_ParentBase);
protected:
MyBase& m_ParentBase;
};
// HelperBase.cpp
HelperBase::HelperBase(MyBase& i_ParentBase)
: m_ParentBase(i_ParentBase)
{}
//-------------------------------------------
// Helper.h
class MyClass;
// Helper holds a ref to MyClass
class Helper : public HelperBase{
public:
Helper(MyClass& i_Parent);
protected:
MyClass& m_Parent;
};
//-------------------------------------------
// MyBase.h
// MyBase holds a ref to HelperBase
class MyBase {
public:
MyBase(HelperBase& i_HelperBase);
protected:
HelperBase& m_HelperBase;
};
// MyBase.cpp
MyBase::MyBase(HelperBase& i_HelperBase) : m_HelperBase(i_HelperBase)
{}
//-------------------------------------------
// MyClass.h
// MyClass holds and initializes an instance of Helper
class MyClass : public MyBase
{
public:
MyClass();
protected:
Helper m_Helper;
};
// MyClass.cpp
MyClass::MyClass()
: MyBase(m_Helper), // <-- this is the problem !!!
m_Helper(*this)
{}
//-------------------------------------------
// Helper.cpp
Helper::Helper(MyClass& i_Parent)
: HelperBase(i_Parent),
m_Parent(i_Parent)
{}
//-------------------------------------------
【问题讨论】:
-
您是否忘记从
HelperBase派生Helper?然后,在Helper构造函数中,您将需要: HelperBase(i_Parent),并且构造函数本身需要下移到MyClass的定义之下。 -
@HolyBlackCat,显然你是完全正确的。我现在修好了。
-
请创建一个回答帖子。
标签: c++ inheritance constructor-injection member-initialization