Абстрактный класс
Определение
- Абстрактный класс — это класс, который не может быть использован для создания объектов напрямую. Он предназначен для того, чтобы быть базовым классом для других классов.
- Абстрактный класс содержит хотя бы одну чисто виртуальную функцию.
Чисто виртуальная функция
- Чисто виртуальная функция — это функция, которая не имеет реализации в базовом классе и должна быть переопределена в производных классах.
- Синтаксис:
virtual return_type function_name(parameters) = 0;
Подробнее про виртуальные функции Описание виртуальных функций и вызовов
Пример
#include <iostream>using namespace std;
// Определение абстрактного классаclass Shape {public: // Чисто виртуальная функция virtual void draw() = 0;
// Виртуальный деструктор virtual ~Shape() {}};
// Класс-наследникclass Circle : public Shape {public: void draw() override { cout << "Drawing Circle" << endl; }};
// Другой класс-наследникclass Square : public Shape {public: void draw() override { cout << "Drawing Square" << endl; }};
int main() { // Невозможно создать объект абстрактного класса // Shape shape; // Ошибка компиляции
// Создание объектов производных классов Shape* circle = new Circle(); Shape* square = new Square();
// Вызов метода draw через указатель на базовый класс circle->draw(); // Вывод: Drawing Circle square->draw(); // Вывод: Drawing Square
// Освобождение памяти delete circle; delete square;
return 0;}
Основные моменты
- Абстрактный класс используется для создания интерфейса, который должны реализовать все производные классы.
- Чисто виртуальная функция объявляется с использованием
= 0
. - Нельзя создать объект абстрактного класса напрямую.
- Производные классы должны переопределять чисто виртуальные функции.
- Виртуальный деструктор в абстрактном классе гарантирует правильное освобождение ресурсов при удалении объекта через указатель на базовый класс.