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