动态初始化抽象类实例

Moa*_*sry 1 c++ abstract-class

可以说我有以下内容

class Parent {
  protected: 
    virtual void overrideMe() = 0;
}

class ChildA : public Parent {
  protected: 
    void overrideMe() = 0{}
}

class ChildB : public Parent {
  protected: 
    void overrideMe() = 0{}
}

class UtilClass {
  public:
  vector<Parent> planes;
  void compute() {
    Parent& p = planes[0];
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我会在UtilsClass中的compute()中输入一个错误,即"Parent"无法初始化.

我想做的是在UtilClass中填充数组"plane"(使用ChildA或childB,即非混合类型)并进行一些计算.

我是否必须在初始化期间使用指针,或者更好地使用模板?我几乎可以肯定模板的使用是不必要的,因为我想限制只使用父类的子项.

Luc*_*ore 5

vector<Parent> planes;没有意义,因为一个Parent不存在.这是一个抽象类.你可以有一个指针向量,或者更好的是智能指针.

即使Parent不是抽象的,Parent对象的向量也会受到对象切片的影响,并且它可能不是你想要的,因为它会破坏多态性.

class UtilClass {
  public:
  vector<Parent*> planes;
  void compute() {
    Parent& p = *planes[0];
  }
}
Run Code Online (Sandbox Code Playgroud)