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

时间:2018-09-29 10:37:11

标签: c++ inheritance

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

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()。我怎么做?

1 个答案:

答案 0 :(得分:1)

使用智能指针:

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();
}