Aviso C26434
A função 'derivada::função' oculta uma função não virtual 'base::function' (c.128).
Diretrizes Principais do C++
Comentários
Quando você introduz uma função que tem o mesmo nome que uma função não virtual em uma classe base, você pode obter um comportamento inesperado. É como introduzir um nome de variável que entra em conflito com um nome de um escopo externo. Por exemplo, talvez você tenha a intenção de substituir uma função de classe base. Se as assinaturas das funções não corresponderem, a substituição pretendida poderá se tornar uma sobrecarga. Em geral, ocultar nomes é perigoso e propenso a erros.
Nas verificações das Diretrizes Principais:
- Somente funções não substituídas na classe atual são verificadas.
- Somente funções não virtuais de classes base são consideradas.
- Nenhuma correspondência de assinatura é executada. Os avisos serão emitidos se nomes não qualificados corresponderem.
Exemplo
Este exemplo demonstra como uma classe derivada pode ocultar funções não virtuais e como as funções virtuais permitem sobrecargas e substituições:
// 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
};
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de