要在构造函数上初始化的抽象变量

Abstract variable to be initialized on constructor

我有一个 class(我们称它为 Example),它本身有一个变量 child。 此变量是 class Child1Child2 的对象,它们都是抽象 class Father 的子对象。我希望在构造函数上定义它。这是我的尝试:

class Example {
public:
    Father child;  //This does not work because father is abstract
};

Example::Example(bool use_1) {
    if use_1 { child = Child1(); }
    else { child = Child2(); }
}

我目前在 public 上定义了两个对象,并且只初始化了一个,但它看起来很丑陋。

class Example {
public:
    Child1 child1;
    Child2 child2;
    //father child;  This does not work because father is abstract
};

Example::Example(bool use_1) {
    if use_1 { 
        child1 = Child1(); // I would like to use child only here...
    }
    else { 
        child2 = Child2(); // ... and here
    }
}

有更好的方法吗?

假设您的 Child1Child2 派生自 Father,这是动态多态性的标准情况。你需要持有一个指针(通常是智能指针)而不是对象本身:

class Example {
public:
    std::unique_ptr<Father> child;
};

Example::Example(bool use_1) {
    if( use_1 ) { child = std::make_unique<Child1>(); }
    else { child = std::make_unique<Child2>(); }
}