c++ - 使用 vector 存储从同一父类继承的不同对象c++

标签 c++ inheritance vector polymorphism

我有一个类,我们称它为多项式。

所需多项式的数量事先未知,在运行时确定。我当前的实现使用了一个容器类,我们称之为 Solutions,其中有一个 vector ,我们称之为 polynomialVector,它是这样定义的:

 std::vector<Polynomial> polynomialVector;

vector 以这种方式创建和填充(Solutions 的构造函数执行此工作):

polynomialVector.reserve(numberofneededpolynomials);
for(int i = 0; i < numberofneededpolynomials ; i++) {
 polynomialVector.emplace_back(0) //Polynomial constructor takes an int parameter
}

现在我想创建将从一般多项式类继承的特定类型的多项式。多项式的类型将由用户在运行时确定。例如,如果用户输入 0,则使用一般的多项式类,如果他输入 1,则使用特定的派生多项式类,对于类型 2,使用不同的特定类型的多项式,等等。

我在示例中看到这可以使用常规数组来完成:

Polynomial * polynomial1 = new DerivedPolynomial1(parameters);
Polynomial * polynomial2 = new DerivedPolynomial2(parameters);
Polynomial * arrayPolynomial[2] = {polynomial1, polynomial2};

但我需要使用 vector 来完成此操作,因为应用程序创建了许多预先不知道的不同多项式(由多项式类随机创建,但这不相关)。我包装 Polynomial 类(Solutions 类)的整个代码已经针对 vector 进行了编码。

我需要做这样的事情:

cin >> type;
if(type == 0) {
 polynomialVector.reserve(numberofneededpolynomials);
 for(int i = 0; i < numberofneededpolynomials ; i++) {
  *create polynomial of type 0 in a similar way that emplace_back does for the general case that I described*
 }
if(type == 1) {
  ... same thing but for type 1
}

如何做到这一点?

最佳答案

要在 std::vector 中存储多态数据类型,您需要存储指针。

要确保代码不会泄漏内存,最简单的方法是使用智能指针。

std::vector<std::unique_ptr<Polynomial>> polynomialVector;
polynomialVector.emplace_back(new DerivedPolynomial1(parameters));

我假设您使用 C++11,因为您的代码使用 emplace_back

关于c++ - 使用 vector 存储从同一父类继承的不同对象c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022035/

相关文章:

java - 使用 LinkedList 而不是 Vector 来定制递归 zip 文件比较工具

c++ - SetLayeredWindowAttributes 不适用于 Windows 7

c++ - 如何调试 Visual C++ 运行时错误

c++ - _beginthreadex 内存泄漏

python - 使用不是来自派生类的变量初始化基类

c++ - "using"基类变量的关键字

c++ - 构造函数调用虚函数的困惑

c++ - 静态指针 C++ 用法

c++ - vector<unique_ptr> 使用 push_back 调整大小 - 它是如何工作的?

c++ - 我可以使用 std::vector 来调用接受数组/指针参数的函数吗?