C++ - 生成子类实例的超类构造函数

Edd*_*Edd 1 c++ inheritance constructor

我有两个类,其中一个是另一个的子类,并且仅通过它包含一个额外的成员变量对于其父事实而不同.我没有使用默认构造函数,将对单个对象的引用作为constructors参数传递.我想是父的构造函数来检查这个对象,然后确定是否要构建父类(在大多数情况下)的实例或子类(在少数特殊情况时).

class Superclass 
{ 
    public: 
        Foo foo;

        Superclass(MyObject* object) 
        { 
            foo = object->GetFoo();

            if(object->CreateSubclass())
            {
                //Create Subclass
            }
            else
            {
                //Create Superclass
            }
        } 
}; 

class Subclass : public Superclass 
{ 
    public: 
        Barr barr;

        Subclass(MyObject* object)
        { 
            barr = object->GetBarr();
        } 
};
Run Code Online (Sandbox Code Playgroud)

我知道工厂设计模式,但不想只为此拥有工厂对象.我宁愿将Superclass初始化内容复制到Subclass(看起来很糟糕),然后检查创建Superclass的每个点的对象,然后调用相应的构造函数:

Superclass* class;
if(object->CreateSubclass())
{
    class = new Subclass(obj);
}
else
{
    class = new Superclass(obj);
}
Run Code Online (Sandbox Code Playgroud)

这种事情是否可行,如果是这样,我将如何从Superclass构造函数中调用子类构造函数?我已经尝试过调用Subclass(object),但是我遇到了需要在另一个之前定义Superclass和Subclass的问题.

感谢您提供的任何建议.

ten*_*npn 6

如果你是针对工厂类,为什么不只是一个静态函数?

class Subclass
{
public:
    static Superclass* create(const MyObject* const object)
    {
        if (object->createSubclass())
        {
            return new Subclass(object);
        }
        else
        {
            return new Baseclass(object);
        }
    }

    // ...
}

// ...

Superclass* const myInstance = Subclass::create(myObject);
Run Code Online (Sandbox Code Playgroud)

(我把静态类放在Subclass中,因为它需要超类和子类实现,但你可以很容易地将它放在共享命名空间或其他东西中,或者甚至将声明放在基类中但是将实现放在cpp中)

您现在已经获得了工厂类的大部分好处,没有比以前更多的代码.你只是缺少传递它的能力或者很容易将它重构为多个实现.