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