Предупреждение C26434
Функция "производный::function" скрывает не-виртуальную функцию base::function (c.128).
C++ Core Guidelines
Замечания
При вводе функции, которая имеет то же имя, что и не виртуальная функция в базовом классе, может возникнуть непредвиденное поведение. Это похоже на ввод имени переменной, конфликтующей с именем из внешней области. Например, может потребоваться переопределить функцию базового класса. Если подписи функций не совпадают, переопределение, предполагаемое переопределение может превратиться в перегрузку. Как правило, скрытие имен опасно и подвержено ошибкам.
В основных рекомендациях выполните следующие действия.
- Проверяются только не переопределяющие функции в текущем классе.
- Рассматриваются только не виртуальные функции базовых классов.
- Сопоставление подписей не выполняется. Предупреждения создаются при совпадении неквалифицированных имен.
Пример
В этом примере показано, как производный класс может скрывать не виртуальные функции и как виртуальные функции разрешают перегрузки и переопределения:
// C26434.cpp
struct Base
{
virtual ~Base() = default;
virtual void is_virtual() noexcept {}
void not_virtual() noexcept {}
};
struct Derived : Base
{
void is_virtual() noexcept override {} // Okay, override existing function
virtual void is_virtual(int i) noexcept {} // Add a virtual overload for function
void not_virtual() noexcept {} // C26434, hides a non-virtual function
virtual void not_virtual(int i) noexcept {} // C26434, and parameters ignored
};