Avertissement C26434
La fonction 'derived ::function' masque une fonction non virtuelle 'base ::function' (c.128).
C++ Core Guidelines
Notes
Lorsque vous introduisez une fonction portant le même nom qu’une fonction non virtuelle dans une classe de base, vous pouvez obtenir un comportement inattendu. Il est semblable à l’introduction d’un nom de variable qui est en conflit avec un nom d’une étendue externe. Par exemple, vous avez peut-être l’intention de remplacer une fonction de classe de base. Si les signatures des fonctions ne correspondent pas, le remplacement prévu peut se transformer en surcharge à la place. En général, le masquage de nom est dangereux et sujette aux erreurs.
Dans les instructions principales case activée s :
- Seules les fonctions non substituées dans la classe actuelle sont case activée.
- Seules les fonctions non virtuelles des classes de base sont prises en compte.
- Aucune correspondance de signature n’est effectuée. Les avertissements sont émis si les noms non qualifiés correspondent.
Exemple
Cet exemple montre comment une classe dérivée peut masquer des fonctions non virtuelles et comment les fonctions virtuelles autorisent les surcharges et les substitutions :
// 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
};