Ответ
В C++ абстрактный класс — это класс, который содержит хотя бы одну чистую виртуальную функцию (объявленную с синтаксисом = 0). Такой класс нельзя инстанциировать напрямую, он предназначен для наследования. Его цель — определить интерфейс и, возможно, часть общей реализации, которую производные классы обязаны завершить.
Пример:
// Абстрактный класс, представляющий геометрическую фигуру
class Shape {
public:
// Чистая виртуальная функция делает класс абстрактным
virtual double calculateArea() const = 0;
// Виртуальный деструктор - обязателен для полиморфных базовых классов
virtual ~Shape() = default;
// Невиртуальный метод - общая реализация для всех фигур
void printDescription() const {
std::cout << "Area is: " << calculateArea() << std::endl;
}
};
// Конкретный класс, реализующий абстрактный интерфейс
class Circle : public Shape {
double radius;
public:
Circle(double r) : radius(r) {}
// Обязательная реализация чистой виртуальной функции
double calculateArea() const override {
return 3.14159 * radius * radius;
}
};
// Shape s; // Ошибка компиляции: нельзя создать объект абстрактного класса
Circle c(5.0); // OK
c.printDescription(); // Работает, вызовет calculateArea() для Circle
Зачем это нужно:
- Принудительное определение интерфейса: Гарантирует, что все производные классы реализуют ключевые методы.
- Полиморфизм: Указатели или ссылки на базовый абстрактный класс
Shape*могут использоваться для работы с любыми производными объектами (Circle,Square). - Запрет инстанцирования: Логически некорректно создавать объект "просто фигуры", должна быть конкретная фигура.
Видео-ответы
▶
▶
▶
▶
▶