Déclaration d’ami en C ++ – différence entre public et privé

Quelqu’un m’a dit qu’il y avait 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?

    Non, il n’y a pas de différence – vous dites simplement que la classe B est une amie de la classe A et qu’elle peut maintenant accéder à ses membres privés et protégés, c’est tout.

    Puisque la friend class B syntaxe friend class B ne déclare pas un membre de la classe A , peu importe où vous l’écrivez, la classe B est un ami de la classe A

    En outre, si vous écrivez un friend class B dans la section protected de A , cela ne signifie PAS que B peut accéder uniquement public 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 , peu importe dans quelle section vous écrivez la friend class B

    La déclaration d’ami apparaît dans un corps de classe et accorde à une fonction ou à une autre classe un access aux membres privés et protégés de la classe où la déclaration d’ami apparaît.

    En tant que tels, les spécificateurs d’access n’ont aucun effet sur la signification des déclarations d’amis (ils peuvent apparaître dans des sections privées ou publiques: sans différence).