C++ 重写类成员变量
我遇到了一个继承问题,我不知道我的解决方案是否优雅。我有这样的课C++ 重写类成员变量,c++,oop,C++,Oop,我遇到了一个继承问题,我不知道我的解决方案是否优雅。我有这样的课 class Var { public: virtual void doSomething(); } class DerivedVar : public Var { public: virtual void doSomething(); void doSomethingElse(); } 我还有从MyBase继承的MyDerivate。MyBase有一个类型为Var的成员,而MyDerived需要有一个De
class Var
{
public:
virtual void doSomething();
}
class DerivedVar : public Var
{
public:
virtual void doSomething();
void doSomethingElse();
}
我还有从MyBase继承的MyDerivate。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(); }
}
模板
类MyBase
{
受保护的:
变分型;
公众:
MyBase(){var.doSomething();}
}
类MyDerived:publicmybase
{
公众:
MyDerived():MyBase(){var.doSomethingElse();}
}
我想知道是否有更好的方法(例如,不需要使用模板)如果您想要或需要避免模板化,那么您需要动态分配协变类型数据成员 然后,一个好的方法是向构造函数链上传递工厂(它可以是默认的构造函数参数),并在基类中调用它 一种不好的方法是使用两阶段初始化,但在20世纪90年代初非常流行 好的,我预料到了你们还并没有遇到的问题 但是你会的 也就是说,如果你能让模板方法发挥作用,那可能是最好的
最直接的解决方案、最少的变通方法、代码和设计调整。如果您不了解CRTP,您可能会觉得阅读CRTP很有趣。嗯。。。如果在堆上添加一级间接寻址和分配对您来说不麻烦,那么您总是可以存储一个指针。。。