2009-08-26 5 views
4

Ich stolperte einen C++ Code mit einem Aufruf eines Klassennamen im oberen Teil der Header-Datei zum Beispielcalling Klassennamen in der Header-Datei

class CFoo; 
class CBar 
{ 
    .... 
}; 

Meine Frage ist, was ist class CFoo für?

Vielen Dank!

Antwort

12

Dies wird als Vorwärtsdeklaration bezeichnet. Es bedeutet, dass es eine Klasse namens CFoo gibt, die später in der Datei (oder einem anderen Include) definiert wird. Dies wird in der Regel für Zeigerelemente in Klassen verwendet, wie zum Beispiel:

class CFoo; 
class CBar { 
    public: 
     CFoo* object; 
}; 

Es ist ein Hinweis auf die C++ Compiler sagen, es nicht ausflippen, dass ein Typname wird ohne definiert verwendet wird, auch wenn es hasn‘ Ich habe die vollständige Definition für CFoo noch nicht gesehen.

+1

Warum nicht einfach eine Header-Datei verwenden, die stattdessen die Definition von CFoo enthält, warum diese Methode stattdessen verwenden? – user1084113

+2

Diese können auch in Header-Dateien gehen; Angenommen, CFoo bezieht sich auf die CBar-Klasse (Zirkelreferenzierung). Manchmal benötigen Sie eine Forward-Deklaration in Ihrem Header, weil Sie eine Klasse nicht vollständig definieren können, ohne zu wissen, dass die andere Klasse existiert. –

1
class CFoo; 

gerade ist eine Erklärung, dass die Klasse vorhanden ist; Selbst wenn Sie die Definition noch nicht gesehen haben, können Sie immer noch mit (CFoo *) oder (CFoo &) spielen - also Zeigern und Referenzen auf CFoo.

+0

Sie können auch Funktionen definieren, die CFoo (nach Wert) zurückgeben. – Tom

+0

Wirklich? Das erscheint mir unwahrscheinlich, denn um nach Wert zurückzukehren, müssen Sie mindestens die Größe von CFoo kennen. –