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