Quando si ignora un metodo virtuale, ho notato che quando commetto un errore nella visibilità (metodo protetto sovrascritto come metodo pubblico), non sono avvisato dal compilatore .Come essere avvisati quando si esegue l'override di un metodo virtuale con visibilità errata
È valido C++, ma in genere è un errore.
Ad esempio:
#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();
}
la compilazione con gcc e clang, con -Wall -Wextra, senza fortuna. Ho eseguito CppCheck su questo codice, ancora senza fortuna.
Quale strumento può aiutarmi a rilevare questo? Ho bisogno di sistemare tutte le fonti di una libreria su cui sto lavorando.
Ok non è un errore. Come affermato nella domanda, riconosco che è perfettamente valido C++. Di solito, non è quello che voglio, perché sto esponendo qualcosa che non dovrebbe essere esposto. – Julien
Sì, non è un errore. È semplicemente qualcosa che il linguaggio ti permette di scrivere, anche se questo potrebbe non essere l'intenzione dell'autore. Questo sarebbe uno di quegli ipotetici "dimmi se intendessi qualcos'altro" avvertimenti, suppongo. Chissà, forse ci sono situazioni in cui si desidera una funzione accessibile a qualcuno che conosce il tipo derivato, ma non a chiunque conosca solo il tipo di base. –
Questa è una domanda eccellente. –