2010-10-08 3 views
7

Grundsätzlich möchte ich die C# -Compiler-Funktionalität seines override Schlüsselwort in meinem C++ - Code.Gibt es eine Möglichkeit, (zur Kompilierungszeit) "überschriebene" Methoden zu kennzeichnen, deren Signaturen nicht mit der Basissignatur übereinstimmen?

class Base 
{ 
    virtual int foo(int) const; 
}; 

class Derived : public Base 
{ 
    virtual int foo(int); // wanted to override Base, but forgot to declare it const 
}; 

Wie wir alle wissen, wird der obige Code gut kompilieren, aber ein seltsames Laufzeitverhalten ergeben. Ich würde meinen C++ - Compiler lieben, meine schlechte Implementierung mit etwas wie C# s override Schlüsselwort zu fangen. Gibt es irgendwelche Schlüsselwörter wie "override", das in C++ eingeführt wird, oder stecken wir bei #define override virtual fest, um unsere Absicht zu zeigen? (Eigentlich tue ich das nicht - ich hasse die Verwendung des Präprozessors, um die Sprache zu "erweitern").

Antwort

1

Wenn Sie nicht für C++ 0x warten können, Visual C++ hat bereits dieses Schlüsselwort override. (Seit 2005 glaube ich). Dort lautet die Syntax:

virtual int foo(int) override; 

Sie sind nicht verpflichtet, es jedoch einzugeben. Und es ist eine Nicht-Standard-Microsoft-Erweiterung.

+0

Entschuldigung für Naveen - Ihr ist die richtige "Zukunft" Antwort; aber für meine aktuellen Bedürfnisse (ich benutze VS2005), funktioniert das !! Ich markierte diese Antwort als "Beantworten" meiner Frage, aber +1 Naveens Antwort – franji1

3

Soweit ich weiß, ist dies mit dem aktuellen Standard nicht möglich. Sie können es in der kommenden C++ 0x tun. Sehen Sie hier für weitere Informationen: Explicit virtual function overrides

+0

Jedes Mal, wenn ich etwas über entdecken C++ 0x finde ich die Syntax hässliche und hässliche ... Sicher Recht ich ist es nur? – dreamlax

+0

+1: Siehe meinen Kommentar zu "geantwortet" qetion – franji1