Используется в контексте виртуальных функций, чтобы явно указать, что функция в производном классе переопределяет виртуальную функцию из базового класса. Это ключевое слово было введено в стандарте C++11 и является полезным средством для повышения безопасности кода и облегчения его понимания.
Использование
override
помогает предотвратить ошибки, которые могут возникнуть из-за опечаток или неправильных сигнатур функций. Когда программист использует override
, компилятор проверяет, действительно ли функция с таким же именем и сигнатурой существует в базовом классе и является виртуальной. Если это не так, компилятор выдаст ошибку.Ключевое слово
override
добавляется к объявлению виртуальной функции в производном классе. Здесь функция
display
в классе Derived
помечена как override
, что указывает на её переопределение функции display
из класса Base
.class Base {
public:
virtual void display() const {
std::cout << "Base display" << std::endl;
}
};
class Derived : public Base {
public:
void display() const override {
std::cout << "Derived display" << std::endl;
}
};
В данном примере функция
display
в Derived
не совпадает по сигнатуре с функцией в Base
, так как пропущен ключевое слово const
. Компилятор выдаст ошибку, так как ключевое слово override
требует, чтобы сигнатуры полностью совпадали.class Base {
public:
virtual void display() const {
std::cout << "Base display" << std::endl;
}
};
class Derived : public Base {
public:
void display() override { // Ошибка компиляции: функция не совпадает по сигнатуре
std::cout << "Derived display" << std::endl;
}
};
Теперь функция
display
в Derived
полностью совпадает с сигнатурой в Base
, и компилятор не выдаст ошибку.class Base {
public:
virtual void display() const {
std::cout << "Base display" << std::endl;
}
};
class Derived : public Base {
public:
void display() const override { // Все правильно, функция совпадает по сигнатуре
std::cout << "Derived display" << std::endl;
}
};
Ставь 👍 и забирай 📚 Базу знаний