我有一个要求,我想在派生类中初始化一个基类成员。
class SuperBase
{
public:
virtual void Set();
};
class Base:public SuperBase
{
protected:
int *pVal;
public:
void Set()
{
//Some Logic
}
};
class Derived1: public Base
{
public:
// I want to Initialize Base::pVal here and after
// that I want to have this value in Set() of Base.
};
class Derived2: public Base
{
//...Same functionality as Derived1;
//...
};
int main()
{
SuperBase *s = new Derived1;
// Here when I create a Derived1 object automatically,
// the value for pVal will be initialized
s->Set();
//After calling this Set, I want to get the pVal value access in Set.
}
我知道这是一件容易的事。但这些是我不能用于这个问题的东西:
我不能使用 Constructor Initializer List 将值从派生类传递到 Base [我知道我可以通过 Constructor Initialiser List 轻松地做到这一点,但有一个要求我不想要现有的 Class Constructor]
我曾尝试使用 CRTP [奇怪的重复模板模式],但这也不合适,因为它使用一种静态绑定,从更高的角度来看,我必须在运行时决定调用哪个类对象 Derived1、Derived2。
我也不想在 Derived1,Derived2 中写任何 get(),因为我只想在那里赋值。这也是我要求的一部分。
我希望 Set 逻辑只存在于 Base 类中,如果 Set 有任何特殊情况,那么我将在 Derived 类中覆盖 Set,否则我将从 Base 访问它。
有什么建议么???任何设计模式??