2009-05-16 9 views

Antwort

19

Ja, das ist möglich. Im Folgenden erklärt nur wsx

class wsx; 

Diese Art der Erklärung wird eine Vorwärts-Erklärung genannt, weil sie gebraucht wird, wenn zwei Klassen aufeinander verweisen:

class A; 
class B { A * a; }; 

class A { B * b; }; 

Einer von ihnen nach vorne dann erklärt werden muss.

+1

Eine Randnotiz: Es ist nicht nur in Fällen von 2 Klassen erforderlich gegenseitig. Zum Beispiel können Vorwärtsdeklarationen verwendet werden, anstatt Header einzubeziehen, um Abhängigkeiten zu minimieren. – SomeWittyUsername

0

Ich bin mir nicht sicher, was du meinst. Der Code, den Sie eingefügt haben, sieht korrekt aus.

+0

Ich benutzte den Code als Beispiel für das, was ich dachte, es würde aussehen; Ich habe gefragt, ob es möglich ist. –

+0

Nun, es ist möglich, und Sie haben es getan, aber ich bin mir nicht sicher, Sie sagten, was Sie sagen wollten, und tat, was Sie vorhatten :) – bdonlan

0

Sie haben die Klasse definiert. Es hat keine Datenelemente, aber das ist nicht notwendig.

3

In Ihrem Beispiel

class wsx; // this is a class declaration 

class wsx // this is a class definition 
{ 
public: 
wsx(); 
} 

Also ja, durch class wsx; Verwendung ist es möglich, eine Klasse ohne zu definieren, sie zu erklären. Mit einer Klassendeklaration können Sie Zeiger und Verweise auf diese Klasse deklarieren, aber keine Instanzen der Klasse. Der Compiler benötigt die Klassendefinition, damit er weiß, wie viel Speicher für eine Instanz der Klasse reserviert werden muss.

4

Dies ist die Definition der Klasse

class wsx 
{ 
public: 
wsx(); 
} 

Dies ist die Definition des Konstruktors ist

wsx::wsx() 
{ 
std::cout<<"WSX"; 
} 

Dies ist eine Vorwärts-Deklaration, die die Klasse sagt irgendwo

class wsx; 
definiert werden
2

Ja. Aber es ist nicht möglich, eine Klasse zu definieren, ohne es zu deklarieren.

Weil: Jede Definition ist auch eine Deklaration.