Как в C++ хранить объекты (либо указатели на них) в массиве (std::vector)? Есть ли возможность хранить объекты (или указатели на них) разных классов в массиве? И как?

21 Авг 2019 в 07:09
199 +1
0
Ответы
1

Да, в C++ можно хранить объекты (или указатели на них) разных классов в массиве (std::vector). Для этого можно воспользоваться полиморфизмом и использовать указатели на базовый класс или интерфейс.

Пример:

#include <iostream>
#include <vector>
class Base {
public:
virtual void print() const {
std::cout << "Base class" << std::endl;
}
};
class Derived1 : public Base {
public:
void print() const override {
std::cout << "Derived class 1" << std::endl;
}
};
class Derived2 : public Base {
public:
void print() const override {
std::cout << "Derived class 2" << std::endl;
}
};
int main() {
std::vector<Base*> objects;
objects.push_back(new Derived1());
objects.push_back(new Derived2());
for (const auto& obj : objects) {
obj->print();
}
// Освобождаем память
for (const auto& obj : objects) {
delete obj;
}
return 0;
}

В этом примере мы создаем массив объектов Base, но добавляем в него указатели на объекты классов Derived1 и Derived2. Используя полиморфизм виртуальных функций, мы можем вызывать методы print() для каждого элемента массива и получать правильное поведение наследников.

Важно не забыть освободить выделенную память для каждого объекта после использования, чтобы избежать утечек памяти.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир