Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpAbBP 89 of 150 menu
◀ ▶

Вектор указателей на базовый класс в C++

Хранить абстрактный тип по значению в векторе нельзя: у такого объекта нет готовых методов. Зато в вектор кладут указатели на базу.

Вектор указателей на базу хранит адреса объектов разных потомков. В цикле вызывают виртуальный метод, а в конце каждый адрес освобождают через delete. У базы деструктор объявляют виртуальным. Запишем вектор фигур и выведем площади:

class Shape { public: virtual ~Shape() {} virtual int area() const = 0; }; class Rectangle : public Shape { public: int width; int height; Rectangle(int width, int height) : width(width), height(height) {} int area() const override { return width * height; } }; class Square : public Shape { public: int side; Square(int side) : side(side) {} int area() const override { return side * side; } };

Создадим объекты Rectangle и Square и выведем площади:

int main() { std::vector<Shape*> figures; figures.push_back(new Rectangle(3, 4)); figures.push_back(new Square(5)); for (Shape* figure : figures) { std::cout << figure->area() << "\n"; } for (Shape* figure : figures) { delete figure; } return 0; }

Создайте std::vector<Figure*>, положите в него объекты Circle и Rectangle через new, выведите площадь каждой фигуры в цикле и удалите все указатели.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить