2010-03-26 7 views
14

Ich habe den folgenden Code in der .h-Datei und ich bin mir nicht sicher, was die Zuweisungsanweisung tut und wie heißt es richtig?C++ Header-Datei und Funktionsdeklaration endet mit "= 0"

virtual void yield() = 0; 

Ich dachte, dass die Funktion einen Wert von 0 standardmäßig gibt aber da diese Funktion void zurückgibt Ich bin ein wenig verwirrt. Kann irgendjemand das kommentieren und vielleicht sagen, wie kann ich auf diese Aufgabe verweisen, ich meine, wie heißt sie im C++ Jargon?

Danke.

+2

lesen Sie über virtuelle Funktionen. –

+1

Und für Informationen, warum diese seltsame Syntax verwendet wird, siehe http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0 –

Antwort

18

Dies ist eine rein virtuelle Funktion. Das bedeutet, dass Unterklassen diese Funktion implementieren müssen, andernfalls sind sie abstrakt, dh Sie können keine Objekte dieser Klasse erstellen.

Die Idee ist, dass eine Klasse eine bestimmte Methode verfügbar machen kann, aber Unterklassen müssen sie implementieren. In diesem Beispiel gibt ISomeInterface eine Methode ToString frei, aber es gibt keine vernünftige Standardimplementierung dafür, also macht es die Methode rein virtuell. Unterklassen wie SomeInterfaceImpl können dann eine passende Implementierung bereitstellen.

+0

Sie erklärte, was eine reine virtuelle Funktion ist. Das OP fragte, was macht das "= 0"? Du hast diese Frage nicht beantwortet. –

+0

Das OP fragt * "wie heißt es im C++ Jargon?" * - dies wird im ersten Satz meiner Antwort beantwortet. Wenn Sie der Meinung sind, dass dies eine weitere Erklärung erfordert, können Sie meine Antwort bearbeiten, eine eigene Antwort hinzufügen oder in einem Kommentar erläutern. –

+0

Ok. Meinetwegen. Ich war verwirrt von der "= 0", aber denke, dass ich das herausgefunden habe. Das "= 0" sagt dem Compiler, dass es keinen Körper für die Funktion geben wird, dies macht es zu einem "reinen virtuellen". Richtig? –

3

wenn eine rein virtuelle Methode (auch bekannt als Zusammenfassung) hier oder google http://www.artima.com/cppsource/pure_virtual.html

= 0 bedeutet nicht, Standardrückgabewert, es ist Benachrichtigung, dass Funktion rein virtuell

+1

Nein ist es nicht - es zeigt an, dass die Funktion rein ist. Reine virtuelle Funktionen können Körper haben. –

+0

also, wie unterscheiden sie sich von nur virtuell? – Andrey

+0

Sie verhindern, dass die Klasse, die sie enthält, instatiert wird. –

8

Die = 0 Syntax a erklärt pure virtual function, hat es nichts mit dem Rückgabewert zu tun.

Wenn eine Klasse mindestens eine reine virtuelle Funktion enthält, wird die Klasse "abstrakt", was bedeutet, dass sie nicht instanziiert werden kann.

In der Praxis müssen solche Klassen durch Unterklassenbildung und Implementierung der virtuellen Funktion (en) konkretisiert werden.

0

Die Syntax ist unklar, aber die "= 0" bedeutet, dass die Methode eine rein virtuelle Funktion ist. Es macht die Klasse abstrakt (Sie können es nicht instanziieren) und die Implementierung wird abgeleiteten Klassen überlassen.

Dies wird verwendet, wenn Sie nur eine Schnittstelle definieren möchten. Verwenden Sie das Schlüsselwort virtual, wenn Sie eine Schnittstelle definieren und auch eine Standardimplementierung bereitstellen möchten.

Verwandte Themen