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