考虑一个具有属性的基类。
class Base
{
protected:
AttributeBase * elementPtr;
...
};
和一个派生类
class Derived : public Base
{
...
};
我还有一个类AttributeDerived
,它是从AttributeBase
派生的。
当我创建类Base
的对象时,我希望以这种方式初始化elementPtr
:
elementPtr = new AttributeBase()
但是,当我创建类Derived
的对象时,我希望以这种方式初始化elementPtr
:
elementPtr = new AttributeDerived()
最干净的方法是什么?
发布于 2015-08-13 00:49:52
您可以向protected
添加一个Base
构造函数,该构造函数允许派生类传递elementPtr
以使用:
Base (AttributeBase* elementPtr) : elementPtr(elementPtr)
{}
然后在派生类中调用构造函数:
Derived() : Base(new AttributeDerived())
{}
如果使用C++11,则可以让其他Base
构造函数委托到受保护的构造函数,以限制代码重复。
发布于 2015-08-13 00:53:15
您可以为不同的目的添加不同的Base
函数:
class Base
{
protected:
AttributeBase * elementPtr;
Base(AttributeBase * p) : elementPtr(p) {}
public:
Base() : elementPtr(new AttributeBase) {}
};
class Derived : public Base
{
public:
Derived() : Base(new AttributeDerived) {}
};
然后
Base b; // elementPtr = new AttributeBase()
Derived d; // elementPtr = new AttributeDerived()
https://stackoverflow.com/questions/31983470
复制相似问题