Eine Zeilenklassendefinition?

7

Ich aktualisiere etwas Code und während ich in einem Header arbeitete, stieß ich auf die folgende Zeile.

%Vor%

Das ist es. Es ist nur eine Zeile, die einer anderen, längeren Klassendefinition vorausgeht. HereIsMyClass ist in der Tat eine andere Klasse woanders, aber ich verstehe nicht, warum diese Zeile hier geschrieben ist. Was macht es?

    
samoz 02.06.2009, 14:24
quelle

4 Antworten

27

Diese Zeile in C ++ ist eine Vorwärtsdeklaration. Es gibt an, dass irgendwann in der Zukunft eine Klasse namens HereIsMyClass existieren wird. Es ermöglicht Ihnen, eine Klasse in einer Deklaration zu verwenden, bevor sie vollständig definiert ist.

Es ist hilfreich, um zirkular abhängige Klassen und Header-Datei-Management aufzubrechen.

Zum Beispiel

%Vor%     
JaredPar 02.06.2009, 14:26
quelle
4

Es heißt "Vorwärtsdeklaration". Dies teilt dem Compiler mit, dass 'HereIsMyClass' der Name einer Klasse ist (im Gegensatz zum Namen einer Variablen, einer Funktion oder etwas anderem). Die Klasse muss später definiert werden, damit sie verwendet werden kann.

Dies ist nützlich, wenn Sie Klassen haben, die sich aufeinander beziehen müssen.

Hier ist eine Beschreibung.

    
Mr Fooz 02.06.2009 14:28
quelle
3

Dies nennt man eine Voranmeldung . Wahrscheinlich gibt es eine Klassendefinition nach dieser Zeile, die HereIsMyClass verwendet, wenn die eigentliche Deklaration von HereIsMyClass weiter unten in der Datei oder in einem anderen # include weiter unten in der Datei enthalten ist.

Wenn Sie diese Zeile nicht haben, ist es möglich, dass die Datei nicht kompiliert wird.

    
J. Polfer 02.06.2009 14:26
quelle
1

Dies wird als "Forward-Deklaration" bezeichnet, was im Wesentlichen ein Versprechen ist, diese Klasse später zu definieren. Wenn Sie eine Forward-Deklaration verwenden, können Sie Zeiger auf HereIsMyClass deklarieren, ohne dafür die Header-Datei einbeziehen zu müssen, aber keine tatsächlichen Objekte, da die Größe eines Objekts von HereIsMyClass dem Compiler noch unbekannt ist.

%Vor%

Die Forward-Deklaration teilt dem Compiler nichts über die Member der Klasse mit, also müssen Sie immer noch die vollständige Klassendefinition (die Header-Datei) einfügen, wann immer Sie sie tatsächlich verwenden, d. e. Zugriff auf seine Mitglieder.

    
Dima 02.06.2009 14:56
quelle

Tags und Links