J'ai une classe de base avec une fonction virtuelle et je veux remplacer cette fonction dans une classe dérivée. Est-il possible de faire le compilateur de vérifier si la fonction que j'ai déclaré dans la classe dérivée en fait remplace une fonction dans la classe de base? Je voudrais ajouter un peu de macro, ou quelque chose qui s'assure que je n'ai pas accidentellement déclarer une nouvelle fonction, au lieu d'annuler l'ancien.
Prenez cet exemple:
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);
}
Ici, parent::handle_event()
est appelée à la place de child::handle_event()
, parce que l'enfant de la méthode manque l' const
déclaration et, par conséquent, déclare une nouvelle méthode. Cela pourrait aussi être une faute de frappe dans le nom de la fonction ou de légères différence dans les paramètres de types. Il peut aussi facilement se produire si l'interface de la base de changements de classe et de quelque classe dérivée n'était pas mis à jour pour refléter le changement.
Est-il un moyen pour éviter ce problème, je peux en quelque sorte dire au compilateur ou un autre outil pour vérifier cela pour moi? Tout utile drapeaux du compilateur (de préférence pour g++)? Comment voulez-vous éviter ces problèmes?