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