Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Статический анализ и ASOC: нулевая терпимость к ошибкам в проекте - 13.11

>
>
>
V2023. Using 'override' ensures that...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2023. Using 'override' ensures that a function signature is correct when overriding a virtual function.

27 Окт 2025

Диагностическое правило добавлено по просьбе пользователей.

Правило предназначено для выявления всех случаев переопределения виртуальных функций базового класса без использования спецификатора override.

Примечание 1. Для поиска только некорректных переопределений виртуальных функций следует использовать диагностическое правило V762.

Примечание 2. Диагностическое правило актуально только для языка C++.

Хотя отсутствие ключевого слова override само по себе не является ошибкой, оно может снижать читаемость кода и приводить к потенциальным ошибкам в будущем. Явно указывая override, разработчик сообщает, что функция переопределяет виртуальную функцию базового класса. Без этого спецификатора может возникнуть недопонимание, и функция будет восприниматься как принадлежащая дочернему классу.

Использование override также обеспечивает дополнительную безопасность, гарантируя, что переопределение выполняется корректно. Если название или сигнатура функции не совпадают с виртуальной функцией базового класса, компилятор выдаст ошибку. Без override код скомпилируется, но создастся новая функция, что может привести к неожиданному поведению программы.

Пример нежелательного кода:

class A
{
public:
  virtual void one() = 0;
  virtual void two();
};

class B : public A
{
  void one();               // <=
  virtual void two();       // <=
};

Пример исправленного кода с использованием спецификатора override:

class A 
{
public:
  virtual void one() = 0;
  virtual void two();
};

class B : public A 
{
  void one() override;       // ok
  void two() override;       // ok
};