Перейти к содержимому

Абстрактный класс

Определение

  • Абстрактный класс — это класс, который не может быть использован для создания объектов напрямую. Он предназначен для того, чтобы быть базовым классом для других классов.
  • Абстрактный класс содержит хотя бы одну чисто виртуальную функцию.

Чисто виртуальная функция

  • Чисто виртуальная функция — это функция, которая не имеет реализации в базовом классе и должна быть переопределена в производных классах.
  • Синтаксис:
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.
  • Нельзя создать объект абстрактного класса напрямую.
  • Производные классы должны переопределять чисто виртуальные функции.
  • Виртуальный деструктор в абстрактном классе гарантирует правильное освобождение ресурсов при удалении объекта через указатель на базовый класс.