C ++使用抽象基类方法创建派生类

时间:2017-07-11 18:27:16

标签: c++

我正在尝试创建一个抽象基类BaseClass,它包含一些字段(但不是全部),包含在派生类DerivedClass1DerivedClass2中。

  

BaseClass.h

class BaseClass
{
private:
    int bmember1;
    int bmember2;

public:
    BaseClass();
    ~BaseClass();
};

例如,DerivedClass1将没有其他成员......

  

DerivedClass1.h

class DerivedClass1 : public BaseClass
{
public:
    DerivedClass1();
    ~DerivedClass1();
};

...但DerivedClass2会dmember1dmember2

  

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中显示所有可能的字段,并且只在具有它们的派生类中使用它们(这对我来说似乎不太优雅)?

提前谢谢你!

1 个答案:

答案 0 :(得分:3)

  

你认为这完全可行吗?

  

我应该采用不同的方法吗?

当然。使用您最喜欢的搜索引擎查找工厂模式。

  

我是否应该在BaseClass中显示所有可能的字段,并且只在具有它们的派生类中使用它们(这对我来说似乎不太优雅)?

你的预感是正确的。那不是个好主意。基类不应对从它派生的类做出任何假设。它应该具有它所需要的 - 仅此而已,仅此而已。