继承层次结构并将元素添加到向量

Inheritance Hierarchy and adding elements to a vector

本文关键字:添加 向量 元素 层次结构 继承      更新时间:2023-10-16

我有以下问题。我有一个带有虚函数的抽象类。

class A{
public:
virtual double GetTotalPrice() = 0;

};

派生类:

class B : public A {
A (string st, int number, double num) : x(st), y(number), z(num) {  }
double GetTotalPrice()  //returns a quantity                              
{
...
}  };

派生类的派生类:

class C : public B {
C (double d, int i) : dd(d), ii(i) {} 
double GetTotalPrice()  //returns a quantity                              
{
...
}  };

我的任务是创建一个带有指向 A 类实例的指针的向量,并向其添加 B 类的 3 个元素和 C 类的 3 个元素。

以下是我创建矢量的方法:

vector<A*> it;

但我不确定如何向其添加项目,尤其是 C 类。 有人可以帮我吗? 我还需要调用GetTotalPrice()所有这些元素的虚函数。我该怎么做?

使用智能指针:

std::vector<std::unique_ptr<A>> vec;
vec.emplace_back(std::make_unique<B>("string",1,1.2));//Write B's ctor arguments
vec.emplace_back(std::make_unique<C>(1.2,1));//Write C's ctor arguments

不建议使用原始指针:

std::vector<A*> vec;
vec.emplace_back(new B("string",1,1.2));
vec.emplace_back(new C(1.2,1));

迭代向量很简单,并且对于两个变体相同:

for(auto&& e:vec)
{
double price = e->GetTotalPrice();
}