Общий код в абстрактном классе в 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.