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