V2023. Using 'override' ensures that a function signature is correct when overriding a virtual function.
Диагностическое правило добавлено по просьбе пользователей.
Правило предназначено для выявления всех случаев переопределения виртуальных функций базового класса без использования спецификатора 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
};