2010-09-24 20 views
2

Disons que j'ai:Y a-t-il une différence entre une classe imbriquée publique et une classe régulière?

class A { 

public: 
    class B { 

    }; 

}; 

est-il une différence entre cette classe imbriquée publique et juste une classe ordinaire B qui est défini dans son propre fichier cpp, à l'exception du fait que A :: B doit être utilisé dans la première option?

+0

Bien que ce ne soit pas vraiment une réponse, je recommande de ne pas imbriquer des classes dans n'importe quel langage qui le supporte. Cela tend à ajouter de la complexité. Même dans les cas où cela aide vraiment à simplifier le code, je trouve que le tirer vers une classe «réelle» de haut niveau aide réellement à réutiliser le code dans beaucoup de cas. –

Répondre

8

Il n'y a essentiellement aucune différence, sauf que A::B est un membre de A, et a donc tous les droits d'accès aux membres privés de A que tout autre membre aurait.

+0

Salut .. J'ai créé une classe B publique imbriquée et je ne vois pas comment elle accède aux variables privées de A .. Je suppose que je ne connais pas la syntaxe ..? –

+0

@rob: Il a besoin d'un objet de type A. Il peut alors accéder à ses membres. –

+0

Il n'y a pas de syntaxe particulière. 'B' est un membre de' A', donc il peut accéder aux variables privées d'une instance 'A' et aux fonctions statiques privées de' A'. –

-1

Il n'y a pas de différence autre que les règles de portée pour "B". Les clients qui utilisent "B" doivent qualifier sa portée avec "A ::". L'imbrication du "B" peut parfois poser problème lorsque vous voulez le renvoyer, car les compilateurs C++ ne vous permettent généralement pas de renvoyer une classe dans une classe (cela vous permet de renvoyer une classe dans un espace de nommage).