Warum können wir das Objekt einer Klasse nicht in derselben Klasse deklarieren?

7
%Vor%     
Suri 09.02.2011, 05:26
quelle

7 Antworten

15

Sie können

tun %Vor%

, weil es nicht erforderlich ist, die Größe von A zu kennen.

    
Foo Bah 09.02.2011, 05:32
quelle
16

Weil die Klasse unendlich groß wäre.

(Dies geschieht sprachlich, indem Sie angeben, dass Sie unvollständige Typen nicht als Mitglieder, nur als Verweis oder als Zeiger auf sie haben dürfen, und dass A bis zum Ende der Klassendefinition ein unvollständiger Typ ist.)

    
GManNickG 09.02.2011 05:28
quelle
9

Ich nehme an, du kommst aus Java oder so? A a erstellt eine vollständige Instanz vom Typ A , die also A enthält, die A enthält, die A enthält.

Sie denken wahrscheinlich darüber nach:

%Vor%     
EboMike 09.02.2011 05:32
quelle
6
%Vor%

Weil A ein unvollständiger Typ ist, weil er noch nicht definiert wurde, sondern definiert wird. Und der Compiler muss den vollständigen Typ von A kennen, wenn er ihn in class A sieht, und da A unvollständig ist, kann seine Größe nicht bestimmen, kann nicht strong> bestimmt, wie viel Platz die Membervariable a einnehmen soll, daher wird sie nicht kompiliert.

Aber die Größe eines Zeigers ist dem Compiler wohlbekannt, egal, um welchen Zeigertyp es sich handelt. Sie können einen Zeiger in Ihrer Klasse wie folgt definieren:

%Vor%

Online-Demo: Ссылка

    
Nawaz 09.02.2011 05:28
quelle
1

In C ++:        Sie können dies nicht tun, da es rekursive Struktur (kein Ende für die Berechnung der Objektgröße) sein wird, um dieses Problem zu überwinden,
Verwenden Sie den selbstreferentiellen Zeiger, d. H. Den Zeiger mit der Adresse des gleichen Klassentyps.

%Vor%     
DesigningLives 07.04.2014 12:14
quelle
1

Auf diese Weise können Sie einen Zeiger auf ein Objekt der Klasse A haben. Auf diese Weise ist es nicht erforderlich, die Größe der Klasse A zu kennen, bevor sie zur Kompilierzeit deklariert wird.

%Vor%     
swapnilsj 10.03.2016 15:00
quelle
-1
%Vor%

Dieses Beispiel wird in "Bjarne Stroustrup Die C ++ Programmiersprache - 3. Ausgabe" gegeben.

Und es funktioniert ... Eine Erklärung wäre nett.

    
dumb_programmer 17.03.2017 14:04
quelle

Tags und Links