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