Метод производного класса скрывает virtual
метод базового класса вместо переопределения его
Этот дефект возникает, когда метод производного класса имеет то же имя и количество параметров, что и virtual
метод базового класса, но:
Списки параметров различаются по крайней мере одним типом параметров.
Списки параметров отличаются наличием или отсутствием таких квалификаторов, как const
.
Метод производного класса скрывает virtual
метод базового класса вместо переопределения.
Можно непреднамеренно скрыть метод базового класса вместо переопределения его методом производного класса.
Если метод базового класса скрыт, и вы используете объект производного класса для вызова метода с параметрами базового класса, то вместо этого вызывается метод производного класса. Для параметров, типы которых не совпадают с аргументами, которые вы передаете, приведение происходит, если это возможно. В противном случае происходит отказ компиляции.
Чтобы переопределить виртуальный метод базового класса с помощью метода производного класса, объявите методы с помощью идентичных списков параметров. Например, измените тип параметра или добавьте const
квалификатор при необходимости.
В C++ 11 и более поздних версиях можно объявить предполагаемые методы переопределения в производном классе с помощью спецификатора override
. Когда вы объявляете производные методы класса с помощью спецификатора override
компиляция прекращает работать, если списки параметров метода базового класса и метода производного класса отличаются. Методы производного класса не могут непреднамеренно скрыть методы базового класса, и обеспечивается переопределение виртуальных методов базового класса.
В противном случае добавьте линии с помощью
к производному объявлению класса. Затем можно получить доступ к методу базового класса с помощью объекта производного класса.Base_class_name
:: method_name
Группа: Объектно-ориентированная |
Язык: C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки: VIRTUAL_FUNC_HIDING |
Влияние: Средний |