Назад к вопросам
Junior
138
questionbank

Что такое переопределение (override) в C++?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Переопределение (override) – это механизм в объектно-ориентированном программировании, где производный класс предоставляет свою специфическую реализацию виртуальной функции, объявленной в базовом классе. При вызове такой функции через указатель или ссылку на базовый класс будет выполнена реализация из фактического типа объекта (производного или базового), в зависимости от того, была ли функция переопределена.

Основные моменты:

  • Применяется только к виртуальным функциям.
  • Сигнатура (имя, тип возвращаемого значения, типы и количество параметров) переопределяющей функции в производном классе должна точно совпадать с сигнатурой переопределяемой функции в базовом классе.
  • Ключевое слово override (начиная с C++11) используется для явного указания намерения переопределить функцию. Компилятор проверит, действительно ли функция из базового класса существует с такой сигнатурой, и выдаст ошибку, если нет. Это помогает избежать опечаток и делает код более читабельным.

Пример:

class Base {
public:
    virtual void print() {
        // Реализация базового класса
        // ...
    }

    virtual void display(int x) const {
        // Еще одна виртуальная функция
        // ...
    }
};

class Derived : public Base {
public:
    // Переопределение функции print из Base
    void print() override {
        // Специфичная реализация для Derived
        // ...
    }

    // Это не переопределение, так как отсутствует const
    /*
    void display(int x) {
        // Ошибка компиляции с ключом override
        // ...
    }
    */

    // Правильное переопределение функции display из Base
    void display(int x) const override {
        // Специфичная реализация для Derived
        // ...
    }
};