Абстрактный класс в C++
Пусть есть класс User, а от него наследуют Employee
и Student. Объекты User создавать не будем:
база только собирает общее для наследников.
Класс становится абстрактным, если в нем есть метод
без тела. В конце объявления вместо тела пишут = 0.
Такой метод называют чистым виртуальным: в базе нет
тела, его обязан написать потомок.
На фигуре то же самое. У Shape метод area
без формулы, формулу пишет потомок. Запишем Shape:
class Shape {
public:
virtual ~Shape() {}
virtual int area() const = 0;
};
class Circle : public Shape {
public:
int radius;
Circle(int radius) : radius(radius) {}
int area() const override {
return 3 * radius * radius;
}
};
Создадим объект класса Circle и выведем его площадь:
int main() {
Circle circle(2);
std::cout << circle.area() << "\n";
return 0;
}
Спецификатор = 0 не задает число в памяти -
это пометка для компилятора: метод нужно
переопределить в конкретном потомке. Пока в классе
остается хотя бы одна такая декларация, тип
считается абстрактным, даже если другие методы
уже имеют тела.
Сделайте абстрактный класс Figure,
представляющий геометрическую фигуру.
Пусть от него наследуют классы Circle,
Rectangle и Square.