Каждая переопределяющая виртуальная функция должна быть объявлена с переопределением или конечным спецификатором
Каждая переопределяющая виртуальная функция должна быть объявлена с переопределением или конечным спецификатором.
Виртуальные функции реализуют полиморфное поведение в иерархии классов. После объявления функции как virtual в базовом классе все экземпляры функции с идентичным списком параметров в производных классах неявно переопределяют базовую функцию. Если использовать это неявное действие компилятора для реализации полиморфных функций, это может привести к ошибкам. Например:
Функция может стать непреднамеренной virtual потому что его сигнатура соответствует виртуальной функции в базовом классе.
Функция может непреднамеренно стать невиртуальной, поскольку в списке параметров имеются различия.
Неявное объявление переопределяющих виртуальных функций также может затруднить чтение кода.
Чтобы избежать случайных ошибок и улучшить удобочитаемость, используйте спецификаторы override и final явно в каждом объявлении переопределяющих функций.
Polyspace ® помечает объявления virtual если все эти операторы истинны:
Функция находится в производном классе.
Сигнатура функции соответствует сигнатуре виртуальной функции в базовом классе.
В объявлении функции отсутствует спецификатор override или final.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Производные классы |
| Категория: Обязательно, Автоматизировано |