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

Общий код в абстрактном классе в C++

Абстрактный класс может содержать и готовые методы с телом, не только чистые объявления.

Общий код удобно держать в базе: один метод вызывает чистый виртуальный, а потомки подставляют только формулы. Запишем Figure с методом describe и выведем отчет для круга:

#include <iostream> class Figure { public: virtual ~Figure() {} virtual int area() const = 0; virtual int perimeter() const = 0; void describe() const { std::cout << area() << " " << perimeter() << "\n"; } }; class Circle : public Figure { public: int radius; Circle(int radius) : radius(radius) {} int area() const override { return 3 * radius * radius; } int perimeter() const override { return 2 * 3 * radius; } };

Создадим объект класса Circle и выведем общий отчет:

int main() { Circle circle(2); circle.describe(); return 0; }

При вызове describe у объекта Circle срабатывает виртуальный механизм: внутри базового метода выполняются переопределенные area и perimeter. Потомки не дублируют вывод - они только считают числа.

Сделайте в Figure метод describe, который выводит площадь и периметр. Реализуйте класс Circle с чистыми методами area и perimeter.

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