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