2016-07-29 6 views
4

Ich meine, wenn ich in meiner Klasse B bin, die eine andere Klasse A (nicht von mir erstellt) erweitern, wie würden Sie wissen, dass die Methode, die Sie schreiben:Wie überprüfen Sie, ob Sie eine neue Methode schreiben oder eine bestehende überschreiben?

void SetStatus() { } 

es nicht bereits erklärt hat, und Sie Überschreibe es einfach? Rechtsklick-> Gehe zu Definition jedes Mal? (zum Beispiel auf VS2015).

+0

neben einer statischen Analyse glaube ich nicht, dass es eine Sprachfunktion gibt, die für alle Fälle funktioniert. – NathanOliver

+0

Ich bin kein Benutzer von VS, aber in Eclipse CDT gibt es einen Indikator am linken Rand des Editors, der angezeigt wird, wenn eine Elementfunktion eine Basisklassenfunktion überschreibt oder schattiert. Könnte VS etwas ähnliches haben? –

+1

@FredLarson nein, VS hat nichts ähnliches. –

Antwort

0

könnten Sie verwenden override specifier (da C++ 11), wie zum Beispiel:

void SetStatus() override { } 

Was Sie erwarten, ist ein Compiler-Fehler zu erhalten. Wenn Sie es erhalten, bedeutet die Funktion (d. H. SetStatus() hier) ist nicht deklariert oder es wird erklärt, aber die Signatur stimmt nicht überein. Dann können Sie bestätigen, dass es kein Überschreiben gibt und entfernen Sie override specifier.

+0

Ich denke, die "Rechtsklick-> Go to Definition" die OP erwähnt, wäre einfacher. –

1

Wenn Sie den Code haben - Sie könnten die Methode final in Ihrer Basisklasse deklarieren, dann wird der Code nicht kompiliert, wenn Sie versuchen, eine virtuelle Methode zu überschreiben.

Wenn Sie es überschreiben können, können Sie versuchen, A :: SetStatus(); in der Definition von B :: SetStatus().

Wenn Ihre IDE einen Fehler anzeigt und nicht kompiliert, ist sie nicht in A implementiert. Dies ist dem "Goto-Definition" -Ansatz sehr ähnlich.

Verwandte Themen