C++ 使用抽象基类指针创建派生类的动态数组

C++ 使用抽象基类指针创建派生类的动态数组,c++,C++,如果基是抽象类,是否允许创建基指针的动态数组?我认为答案肯定是肯定的,但当我将基类函数(用于派生类)声明为纯虚拟时,它告诉我无法创建派生对象,因为它们是抽象的。根据我的理解,这不应该是因为基类可以是抽象的,而派生类可以是抽象的。为了解决这个问题,我尝试从这些基类函数的末尾删除“=0”,并为它们提供空定义。这允许我进行编译,但我的函数正在实现基类定义。如何解决此问题?请确保您维护的是指向对象的指针容器,而不是对象本身。如果您尝试将派生类对象存储在基类对象的容器中而不是指针中,它将生成一个副本并给您

如果基是抽象类,是否允许创建基指针的动态数组?我认为答案肯定是肯定的,但当我将基类函数(用于派生类)声明为纯虚拟时,它告诉我无法创建派生对象,因为它们是抽象的。根据我的理解,这不应该是因为基类可以是抽象的,而派生类可以是抽象的。为了解决这个问题,我尝试从这些基类函数的末尾删除“=0”,并为它们提供空定义。这允许我进行编译,但我的函数正在实现基类定义。如何解决此问题?

请确保您维护的是指向对象的指针容器,而不是对象本身。如果您尝试将派生类对象存储在基类对象的容器中而不是指针中,它将生成一个副本并给您一个编译错误。确保它看起来像这样:

std::vector<Base *> container;
container.push_back(new Derived); // Will make a pointer to the derived object
container[0]->Foo; // Will call derived method
std::向量容器;
容器。推回(新派生);//将生成指向派生对象的指针
容器[0]->Foo;//将调用派生方法

请展示一个演示您的问题的示例让我们看一些代码。是的,抽象基类指针的n数组可以,您的问题在其他地方-通常在签名(派生类是否使用
覆盖
关键字?)或派生对象的实例化中。您确定要创建指针数组吗,不是对象数组?它应该是
BaseClass**foo=new BaseClass*[n],而不是
基类*foo=新基类[n]