Назад к вопросам
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
// ...
}
};