2016-02-19 9 views
26

Angenommen, ich habe Klasse A mit einer virtuellen Funktion F():Unterschied zwischen neu zu definieren und überschreibt eine Funktion

class A 
{ 
    virtual void F() 
    { 
     // Do something 
    }; 
}; 

Und ich habe eine andere Klasse B die A und erbt neu definiertF():

class B : A 
{ 
    void F() 
    { 
     // Do something 
    }; 
}; 

Und eine andere Klasse C, die auch A erbt, aber überschreibtF():

class C : A 
{ 
    void F() override 
    { 
     // Do something 
    }; 
}; 

Was ist der Unterschied zwischen F() in Klassen B und C?

Antwort

24

Sowohl B::f() als auch C::f() sind Overrides und sie sind genau das gleiche.

override ist im Wesentlichen ein Kompilierung-Beratungs Begriff, der einen Übersetzungsfehler wenn die Funktion macht nicht Überschreibung eine in einer Basisklasse führen wird.

Dies kann bei der Programmstabilität helfen: Wenn der Name und die Parametertypen auf A::f() geändert werden, wird ein Kompilierungsfehler auftreten.

29

Beide sind außer Kraft gesetzt.

Wenn Sie das Schlüsselwort override verwenden, stellen Sie sicher, dass ein Kompilierungsfehler auftritt, wenn es zu nicht ein Override sein sollte.

Und das ist eine gute Übung.

+3

nicht die Lesbarkeit Faktor zu erwähnen, wenn Repositories wie git – Tgsmith61591

+0

@ Tgsmith61591 Lesen: Ja. Ich fragte mich auch, ob ich ein Beispiel hinzufügen sollte, wie man überladen (im Wesentlichen "neu definieren"), ohne zu überschreiben. Aber ich beschloss, knapp zu sein. :) –

Verwandte Themen