Ho una classe base con una funzione virtuale e voglio sovrascrivere quella funzione in una classe derivata. C'è un modo per fare in modo che il compilatore controlli se la funzione che ho dichiarato nella classe derivata sostituisce effettivamente una funzione nella classe base? Vorrei aggiungere qualche macro o qualcosa che assicuri di non dichiarare accidentalmente una nuova funzione, invece di sovrascrivere quella vecchia.
Prendi questo esempio:
class parent {
public:
virtual void handle_event(int something) const {
// boring default code
}
};
class child : public parent {
public:
virtual void handle_event(int something) {
// new exciting code
}
};
int main() {
parent *p = new child();
p->handle_event(1);
}
Qui parent::handle_event()
viene chiamato invece di child::handle_event()
, perché il metodo del bambino manca la const
dichiarazione e quindi dichiara un nuovo metodo. Potrebbe anche essere un errore di battitura nel nome della funzione o qualche piccola differenza nei tipi di parametri. Può anche accadere facilmente se l'interfaccia della classe base cambia e da qualche parte qualche classe derivata non è stata aggiornata per riflettere la modifica.
C'è un modo per evitare questo problema, posso in qualche modo dire al compilatore oa qualche altro strumento di controllarlo per me? Eventuali flag utili per il compilatore (preferibilmente per g ++)? Come eviti questi problemi?