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