我试图创建抽象基类BaseClass
,它有一些字段(但不是全部),它们包含在派生类DerivedClass1
和DerivedClass2
中。C++使用抽象基类方法创建派生类
BaseClass.h
class BaseClass
{
private:
int bmember1;
int bmember2;
public:
BaseClass();
~BaseClass();
};
例如,DerivedClass1不会有额外的会员...
DerivedClass1.h
class DerivedClass1 : public BaseClass
{
public:
DerivedClass1();
~DerivedClass1();
};
..但是德rivedClass2会,dmember1
和dmember2
。
DerivedClass2.h
class DerivedClass2 : public BaseClass
{
private:
int dmember1;
int dmember2;
public:
DerivedClass1();
~DerivedClass1();
};
现在,我想在BaseClass
一些方法,我可以构建任何派生类,动态的,使用的东西随心所欲,如枚举:
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
中出现所有可能的字段,并且仅在派生类中使用它们(这对我来说看起来不太优雅)?
非常感谢您的提前!
这是什么问题?请提供[MCVE](https://stackoverflow.com/help/mcve),以便我们能够为您提供帮助。 – Ron
这是mtl; dr对不起 –
基类不知道只存在于派生类中的成员。事实上,类别不知道其他类是否从它们派生出来。 –