Ho una classe base con una funzione virtuale e voglio sovrascrivere quella funzione in una classe derivata. C'è un modo per far sì che il compilatore verifichi se la funzione che ho dichiarato nella classe derivata sovrascrive effettivamente una funzione nella classe base? Vorrei aggiungere qualche macro o qualcosa che assicuri che non abbia dichiarato accidentalmente una nuova funzione, invece di sovrascrivere quella vecchia.Sovrascrivere in modo sicuro le funzioni virtuali C++
Prendete 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()
è chiamato al posto di child::handle_event()
, perché il metodo del bambino manca la dichiarazione di const
e dichiara quindi un nuovo metodo. Questo potrebbe anche essere un refuso 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 una classe derivata non è stata aggiornata per riflettere la modifica.
C'è qualche modo per evitare questo problema, posso in qualche modo dire al compilatore o qualche altro strumento per controllare questo per me? Eventuali flag utili per il compilatore (preferibilmente per g ++)? Come eviti questi problemi?
Grande questione, ho cercato di capire perché la mia funzione di classe figlia doesn; t ottenere chiamato in quanto un'ora ora! –