РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
680 of 815 menu

Ключевое слово override

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

Синтаксис

virtual return_type method_name(parameters) override; virtual return_type method_name(parameters) override { /* тело */ }

Пример

Давайте создадим базовый класс Animal с виртуальным методом sound и производный класс Dog, который переопределяет этот метод с помощью ключевого слова override:

#include <iostream> using namespace std; class Animal { public: virtual void sound() { cout << "Some sound" << endl; } }; class Dog : public Animal { public: void sound() override { cout << "Woof" << endl; } }; int main() { Dog dog; dog.sound(); return 0; }

Результат выполнения кода:

"Woof"

Пример

Если в производном классе случайно указать неверную сигнатуру метода и при этом использовать override, компилятор сообщит об ошибке. Давайте попробуем переопределить метод sound с параметром, которого нет в базовом классе:

#include <iostream> using namespace std; class Animal { public: virtual void sound() { cout << "Some sound" << endl; } }; class Dog : public Animal { public: // Ошибка компиляции: метод не переопределяет // виртуальный метод базового класса void sound(int volume) override { cout << "Woof " << volume << endl; } }; int main() { Dog dog; dog.sound(5); return 0; }

Компилятор выдаст ошибку, потому что метод sound с параметром int не переопределяет виртуальный метод sound без параметров из класса Animal.

Пример

Давайте рассмотрим корректное переопределение виртуального метода с параметрами. Создадим базовый класс Shape с виртуальным методом area, принимающим один параметр, и производный класс Rectangle:

#include <iostream> using namespace std; class Shape { public: virtual int area(int factor) { return factor; } }; class Rectangle : public Shape { public: int area(int factor) override { return factor * 2; } }; int main() { Rectangle rect; cout << rect.area(5) << endl; return 0; }

Результат выполнения кода:

10

Смотрите также

  • ключевое слово virtual,
    которое объявляет виртуальный метод
  • ключевое слово final,
    которое запрещает переопределение метода
  • ключевое слово pure-virtual,
    которое создает чисто виртуальный метод
  • раздел inheritance,
    который описывает наследование классов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить