Иерархия наследования и добавление элементов в вектор - PullRequest
0 голосов
/ 29 сентября 2018

У меня следующая проблема.У меня есть абстрактный класс с виртуальной функцией.

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 и добавить к нему 3 элемента класса B и 3 элемента класса C.

Вот как я создаю вектор:

vector<A*> it;

Но я не уверен, как добавить в него элементы, особенно класса C. Может ли кто-нибудь помочь мне с этим?Мне также нужно вызвать виртуальную функцию GetTotalPrice() для всех этих элементов.Как я могу это сделать?

1 Ответ

0 голосов
/ 29 сентября 2018

Использование умных указателей:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...