Ich habe eine Basisklasse mit einer virtuellen Funktion und möchte diese Funktion in einer abgeleiteten Klasse überschreiben. Gibt es eine Möglichkeit, den Compiler zu überprüfen, ob die in der abgeleitete Klasse deklarierte Funktion tatsächlich eine Funktion in der Basisklasse überschreibt?
Ich möchte etwas Makro hinzufügen oder etwas, das sicherstellt, dass ich nicht versehentlich eine neue Funktion deklariert habe, anstatt das alte zu überschreiben.
Code: Select all
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);
}
Hier Eltern :: Handle_Event () wird anstelle von child :: handle_event () aufgerufen, da die Methode des Kindes die const Deklaration verfehlt und daher eine neue Methode deklariert. Dies kann auch ein Tippfehler im Funktionsnamen oder im geringsten Unterschied in den Parametypen sein. Es kann auch leicht passieren, wenn sich die Schnittstelle der Basisklasse ändert und irgendwo abgeleitete Klasse nicht aktualisiert wurde, um die Änderung widerzuspiegeln. Irgendwelche hilfreichen Compiler -Flags (vorzugsweise für G ++)? Wie vermeiden Sie diese Probleme?