← Назад ко всем вопросам

Что такое чисто виртуальный метод

1️⃣ Как кратко ответить

Чисто виртуальный метод в C++ — это метод, объявленный в базовом классе, который не имеет реализации и должен быть реализован в производных классах. Он объявляется с помощью = 0 в конце сигнатуры метода. Используется для создания абстрактных классов, которые нельзя инстанцировать.

2️⃣ Подробное объяснение темы

Чисто виртуальный метод — это концепция в C++, которая позволяет создавать абстрактные классы. Абстрактный класс — это класс, который не может быть инстанцирован напрямую и служит для определения интерфейса, который должны реализовать производные классы.

Зачем это нужно

Чисто виртуальные методы используются для определения интерфейсов в объектно-ориентированном программировании. Они позволяют разработчикам создавать классы, которые определяют набор методов, которые должны быть реализованы в производных классах. Это обеспечивает гибкость и расширяемость кода, так как позволяет использовать полиморфизм.

Как это работает

Чисто виртуальный метод объявляется в базовом классе с помощью = 0 в конце его сигнатуры. Это указывает на то, что метод не имеет реализации в базовом классе и должен быть реализован в любом производном классе, чтобы этот класс мог быть инстанцирован.

Пример кода

#include <iostream>
​
// Базовый класс с чисто виртуальным методом
class Shape {
public:
    // Чисто виртуальный метод для вычисления площади
    virtual double area() const = 0;
};
​
// Производный класс, реализующий метод area
class Circle : public Shape {
private:
    double radius;
public:
    // Конструктор для инициализации радиуса
    Circle(double r) : radius(r) {}
​
    // Реализация метода area для круга
    double area() const override {
        return 3.14159 * radius * radius;
    }
};
​
// Производный класс, реализующий метод area
class Rectangle : public Shape {
private:
    double width, height;
public:
    // Конструктор для инициализации ширины и высоты
    Rectangle(double w, double h) : width(w), height(h) {}
​
    // Реализация метода area для прямоугольника
    double area() const override {
        return width * height;
    }
};
​
int main() {
    // Создание объектов производных классов
    Circle circle(5.0);
    Rectangle rectangle(4.0, 6.0);
​
    // Вывод площади каждого объекта
    std::cout << "Circle area: " << circle.area() << std::endl;
    std::cout << "Rectangle area: " << rectangle.area() << std::endl;
​
    return 0;
}

Объяснение кода

  • Класс Shape: Это абстрактный базовый класс, который содержит чисто виртуальный метод area(). Этот метод не имеет реализации и должен быть реализован в производных классах.

  • Класс Circle: Производный класс от Shape, который реализует метод area(). Конструктор инициализирует радиус круга, а метод area() вычисляет площадь круга.

  • Класс Rectangle: Еще один производный класс от Shape, который также реализует метод area(). Конструктор инициализирует ширину и высоту прямоугольника, а метод area() вычисляет его площадь.

  • Функция main(): Создает объекты Circle и Rectangle, затем выводит их площади. Это демонстрирует полиморфизм, так как оба объекта используют метод area(), определенный в их собственных классах, но с одинаковым интерфейсом, заданным в Shape.

Тема: Классы / ООП / Полиморфизм
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки