🤔 Что значит ключевое слово override?



Используется в контексте виртуальных функций, чтобы явно указать, что функция в производном классе переопределяет виртуальную функцию из базового класса. Это ключевое слово было введено в стандарте 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;

}

};




Ставь 👍 и забирай 📚 Базу знаний