我有一个类,我们称它为多项式。
所需多项式的数量事先未知,在运行时确定。我当前的实现使用了一个容器类,我们称之为 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/