Iss*_* T. 7 c++ inheritance constructor
考虑具有属性的基类
class Base
{
protected:
AttributeBase * elementPtr;
...
};
Run Code Online (Sandbox Code Playgroud)
和派生类
class Derived : public Base
{
...
};
Run Code Online (Sandbox Code Playgroud)
我也有一个AttributeDerived来自的课程AttributeBase
当我创建类的对象时,Base我希望elementPtr以这种方式初始化:
elementPtr = new AttributeBase()
Run Code Online (Sandbox Code Playgroud)
但是当我创建类的对象时,Derived我希望elementPtr以这种方式初始化:
elementPtr = new AttributeDerived()
Run Code Online (Sandbox Code Playgroud)
最干净的方法是什么?
您可以添加一个protected构造函数Base,允许派生类传递elementPtr使用:
Base (AttributeBase* elementPtr) : elementPtr(elementPtr)
{}
Run Code Online (Sandbox Code Playgroud)
然后在派生类中,调用该构造函数:
Derived() : Base(new AttributeDerived())
{}
Run Code Online (Sandbox Code Playgroud)
如果使用C++ 11,则可以让其他Base构造函数委托给受保护的构造函数来限制代码重复.