Erfordern von Überschreibungen für virtuelle Funktionen, um das Überschreibungsschlüsselwort @ zu verwend
C ++ 11 hinzugefügtoverride
, um sicherzustellen, dass die von Ihnen geschriebenen Memberfunktionen die virtuellen Funktionen der Basisklasse tatsächlich überschreiben (oder nicht kompilieren).
Aber in einer großen Objekthierarchie kann es vorkommen, dass Sie versehentlich eine Member-Funktion schreiben, die eine virtuelle Basisklasse überschreibt, wenn Sie dies nicht beabsichtigt haben! Zum Beispiel
struct A {
virtual void foo() { } // because obviously every class has foo().
};
struct B : A { ... };
class C : B {
private:
void foo() {
// was intended to be a private function local to C
// not intended to override A::foo(), but now does
}
};
Gibt es ein Compiler-Flag / eine Compiler-Erweiterung, die mindestens eine Warnung für @ ausgeben würdC::foo
? Aus Gründen der Lesbarkeit und Korrektheit möchte ich nur erzwingen, dass alle Überschreibungen useoverride
.