web-dev-qa-db-fra.com

Déclaration d'ami en C++ - Différence entre public et privé

Quelqu'un m'a dit qu'il y a une différence entre déclarer une classe d'amis dans les espaces publics ou privés de la classe, mais je n'arrive pas à trouver quoi que ce soit en ligne et je ne suis pas sûr qu'ils sachent de quoi ils parlaient. 

Je veux dire la différence entre:

class A
{
 public: 
      friend class B;
 };

et

class A
{
 private: //or nothing as the default is private
      friend class B;
 };

Y a-t-il une différence?

116
BIU

Non, il n'y a pas de différence - vous dites simplement que la classe B est un ami de la classe A et peut maintenant accéder à ses membres privés et protégés, c'est tout.

120
sharptooth

Puisque la syntaxe friend class B ne déclare pas un membre de la classe A, le lieu d'écriture n'a donc pas d'importance, la classe B est un ami de la classe A

De même, si vous écrivez friend class B dans la section protected de A, cela ne signifie PAS que B ne peut accéder qu'aux membres protected et public de A

Rappelez-vous toujours qu'une fois que B devient un ami de A, il peut accéder à n'importe quel membre de A, quelle que soit la section dans laquelle vous écrivez friend class B.

33
Nawaz

La déclaration d'amis apparaît dans un corps de classe et accorde à une fonction ou à une autre classe l'accès aux membres privés et protégés de la classe où la déclaration d'amis apparaît. 

En tant que tels, les spécificateurs d'accès n'ont aucun effet sur la signification des déclarations d'amis (ils peuvent apparaître dans les sections private: ou public:, sans aucune différence).

0
goyuiitv