Al anular un método virtual, me di cuenta de que cuando cometía un error en la visibilidad (método protegido anulado como método público), el compilador .Cómo ser advertido al anular un método virtual con visibilidad incorrecta
Es válido C++, pero generalmente es un error.
Por ejemplo:
#include <iostream>
class Base
{
protected:
virtual void ProtectedMethod(void)
{
std::cout << "Base::ProtectedMethod" << std::endl;
}
};
class Derived : public Base
{
public:
virtual void ProtectedMethod(void)
{
std::cout << "Derived::ProtectedMethod" << std::endl;
}
};
int main(int, char* [])
{
Derived d;
d.ProtectedMethod();
}
he intentado compilar con gcc y sonido metálico, con -Wall -Wextra, sin suerte. Ejecuté CppCheck en este código, todavía no tuve suerte.
¿Qué herramienta me puede ayudar a detectar esto? Necesito arreglar todas las fuentes de una biblioteca en la que estoy trabajando.
mal, no es un error. Como dije en la pregunta, reconozco que es perfectamente válido C++. Por lo general, eso no es lo que quiero, ya que expongo algo que no debe exponerse. – Julien
Sí, no es un error. Es simplemente algo que el lenguaje le permite escribir, aunque esta no sea la intención del autor. Esta sería una de esas advertencias hipotéticas de "dime si quiero decir algo más", supongo. Quién sabe, tal vez haya situaciones en las que desee una función accesible para alguien que conoce el tipo derivado, pero no para cualquiera que solo conozca el tipo de base. –
Esta es una excelente pregunta. –