2009-06-20 8 views
4

** Si une structure peut être un autoréférentiel. commeUne classe peut-elle être auto-référencée?

struct list 
{ 
    struct list *next; 
}; 

car il n'y a pas de différence entre class et struct, à l'exception des spécificateurs d'accès par défaut. alors est-il possible d'écrire une classe ...

class list 
{ 
    class list *next; 
}; 

ou peut-être est-il une syntaxe différente pour obtenir une classe d'auto-référentiel.? si oui, alors comment **

+2

Comme vous l'avez mentionné vous-même, il n'y a * absolument aucune différence * entre une classe et une structure en C++ sauf les modificateurs d'accès par défaut. –

+2

En C++, vous pouvez, au moins dans 99,9% des cas, éviter de taper «struct» ou «class» avant le nom de la variable comme dans: «class list {list * next;}; –

+0

Ouais, avoir à mettre "struct list * next;" est seulement une chose C. En C++ vous feriez toujours juste "list * next;". – newacct

Répondre

12

Oui, mais vous ne pouvez autoréférence un pointeur ou une référence à la classe (ou struct)

La façon typique est juste:

class list { list* next; } 

Si vous avez besoin de deux classes pour se référer mutuellement les uns aux autres, il vous suffit de transmettre déclarer les classes, comme suit:

class list; 
class node; 

class list { node* first; } 
class node { list* parentList; node* next; } 

Lorsque vous n'avez pas la déclaration complète (juste un forw déclaration ard), vous ne pouvez déclarer que des pointeurs ou des références. Cela est dû au fait que le compilateur connaît toujours la taille d'un pointeur ou d'une référence, mais ne connaît pas la taille de la classe ou de la structure à moins qu'il ne possède la déclaration complète.

+2

+1 - gentil - mais cette dernière phrase devrait se terminer par 'définition de classe' (pas de déclaration :) –

+0

+1 Faisal/Lou. "classe X" est une "déclaration complète" (d'un type incomplet). C n'appelle pas "struct list {int d;};" une définition, mais l'appelle à la place une déclaration d'un type complet. C++ signifie qu'en l'appelant une définition. Belle réponse autrement, bien sûr. –

Questions connexes