我有以下问题。我有一个带有虚函数的抽象类。
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()
。我怎么做?
答案 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();
}