El siguiente código de C++ creo que es correcto, pero produce algunas advertencias cuando se compila con "-Woverloaded-virtual", ¿es una advertencia falsa o hay un problema real con este código?gcc Advertencias de Woverloaded-virtual
Si esto es una advertencia falsa, ¿qué puedo hacer para evitarlo, defina todas las variantes virtuales de excepción en rids Get derivados de la advertencia, pero tal vez es una mejor solución
G ++ comando:
g++ -c -Woverloaded-virtual test.cpp
test.cpp:22:18: warning: ‘virtual void intermediate::exception(const char*)’ was hidden [-Woverloaded-virtual]
test.cpp:32:18: warning: by ‘virtual void derived::exception()’ [-Woverloaded-virtual]
código C++
using namespace std;
class base
{
public:
virtual void exception() = 0;
virtual void exception(const char*) = 0;
};
class intermediate : public base
{
public:
virtual void exception()
{
cerr << "unknown exception" << endl;
}
virtual void exception(const char* msg)
{
cerr << "exception: " << msg << endl;
}
};
class derived : public intermediate
{
public:
virtual void exception()
{
intermediate::exception("derived:unknown exception");
}
};
¿Cómo suprimimos esta advertencia si es intencional? – Sampath
No estoy seguro, pero supongo que 'void exception (const char * msg) = delete;' funcionaría. EDITAR: No, eliminar una sobrecarga como esa es un error. Pero me sorprendería si esto fuera realmente intencional, en un código bien diseñado; debería poder tratar una instancia de una clase derivada como una instancia de la clase base. –
Como lo señala la otra respuesta, puede redefinirlo como 'privado 'bien. –