Абстрактный класс и его наследники

199
07 июля 2018, 15:00

Знаю, что если есть абстрактный клас(например: Account) и наследники абстрактного класа(PrivelegeAccount, SavingAccount), то можно через указатель на родительский класс(Account*) использовать наших наследников.

Так вот задача: У нас должен быть динамический массив аккаунтов разных типов. Как такое сделать и можно ли через vector такое сотворить?

С уважением.

Answer 1

Вам следует хранить элементы в векторе по указателю. Лучше использовать smart pointer. Что то вроде:

struct Account
{ 
    virtual ~Account() = default; // Пожалуй все-таки не стоит забывать про виртуальный деструктор
    virtual std::string GetMessage() = 0;
};
struct PrivelegeAccount final: public Account
{
    virtual std::string GetMessage() override final { return "PrivelegeAccount"; }
};
typedef std::unique_ptr<Account> AccountPtr;
int main()
{
    std::vector<AccountPtr> vector;
    vector.emplace_back(std::make_unique<PrivelegeAccount>());
    for (const auto& account : vector)
        std::cout << account->GetMessage() << std::endl;
    return 0;
}
READ ALSO
Как запустить программу в visual studio code?

Как запустить программу в visual studio code?

Выскакивает вот такая ошибка, когда нажимаю Отладка -> Запустить без отладки Как решить эту проблему?

297
segmentation fault при очистке выделенной памяти

segmentation fault при очистке выделенной памяти

Что я делаю не так ? Программа грубо говорят пишет в компорт пакет и читает ответПример кода:

225
Socket получить body html

Socket получить body html

Отправляю на сервер запрос и получаю данные

242
bool vs bit * 8

bool vs bit * 8

Здравствуёте, у меня достаточно конкретный вопрос: Стоит ли пренебрегать переменными bool типа опционной переменной из, например, 8 бит:

225