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