覆盖类成员变量

时间:2013-04-07 17:15:08

标签: c++ oop

我遇到了继承问题,我不知道我的解决方案是否优雅。我有这样的课程

class Var
{
public:
    virtual void doSomething();
}
class DerivedVar : public Var
{
public:
    virtual void doSomething();
    void doSomethingElse();
}

我还有从MyBase继承的MyDerived。 MyBase有一个Var类型的成员,而MyDerived需要有DerivedVar的成员,所以它可以调用doSomething()。目前,我正在使用模板来解决这个问题

template<typename VarType>
class MyBase
{
protected:
    VarType var;
public:
    MyBase() { var.doSomething(); }
}

class MyDerived : public MyBase<DerivedVar>
{
public:
    MyDerived() : MyBase() { var.doSomethingElse(); }

}

我想知道是否有更好的方法(例如,无需使用模板)

1 个答案:

答案 0 :(得分:1)

如果您想要或需要避免模板化,那么您需要动态分配协变类型数据成员。

然后一个好的方法是将工厂传递给构造函数链(它可以是默认的构造函数参数),并在基类中调用它。

20世纪90年代初非常流行的一种非常流行的方法是使用两阶段初始化。

好的,我预计你还没有遇到过这个问题。

但你会的。 ; - )

那就是说,如果你能使模板方法工作最好的话。

最直接的解决方案,最少量的解决方法以及代码和设计适应性。

相关问题