我正在尝试创建一个抽象基类BaseClass
,它包含一些字段(但不是全部),包含在派生类DerivedClass1
和DerivedClass2
中。
BaseClass.h
class BaseClass
{
private:
int bmember1;
int bmember2;
public:
BaseClass();
~BaseClass();
};
例如,DerivedClass1将没有其他成员......
DerivedClass1.h
class DerivedClass1 : public BaseClass
{
public:
DerivedClass1();
~DerivedClass1();
};
...但DerivedClass2会dmember1
和dmember2
。
DerivedClass2.h
class DerivedClass2 : public BaseClass
{
private:
int dmember1;
int dmember2;
public:
DerivedClass1();
~DerivedClass1();
};
现在,我想在BaseClass
中使用一些方法来构造派生类,动态地使用任意的东西,例如Enum:
SwitchEnum.h
enum Switch_Enum
{
DERIVED_1,
DERIVED_2
};
我想使用参数来初始化BaseClass
中的字段,但是我还想给那些仅出现在派生类中的字段提供一些默认值,我稍后可以用方法更改,来自BaseClass
。所以,像
//(BaseClass.h)
//BaseClass constructor, initializingthe BaseClass's fields with the parameters
BaseClass(int param1, int param2)
{
//params to bmembers
}
//Construct the appropriate derived class
static BaseClass* createBase(int param1, int param2, Switch_Enum selector);
{
switch(selector):
{
//DerivedClass1 if DERIVED_1, 2 if 2, etc.
//use BaseClass(int param1, int param2) to set the BaseClass fields that are present in all derived classes
//If derived class has additional fields, give default values to those as well
}
}
最后,要设置可能的附加字段,请执行以下操作:
//(BaseClass.h)
virtual void changeDmembers(int dmember2val, int dmember2val)
{
//if DerivedClass1, do nothing
//if DerivedClass2, set dmember1&2 to dmember1&2val
}
你认为这完全可行吗?我应该采用不同的方法吗?我是否应该在BaseClass
中显示所有可能的字段,并且只在具有它们的派生类中使用它们(这对我来说似乎不太优雅)?
提前谢谢你!
答案 0 :(得分:3)
你认为这完全可行吗?
是
我应该采用不同的方法吗?
当然。使用您最喜欢的搜索引擎查找工厂模式。
我是否应该在
BaseClass
中显示所有可能的字段,并且只在具有它们的派生类中使用它们(这对我来说似乎不太优雅)?
你的预感是正确的。那不是个好主意。基类不应对从它派生的类做出任何假设。它应该具有它所需要的 - 仅此而已,仅此而已。