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.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage