Friend declaration w C++ - różnica między publicznym a prywatnym

Ktoś mi powiedział, że jest różnica między ogłoszeniem klasy przyjaciół w publicznych lub prywatnych obszarach klasy, ale nie mogę znaleźć nic na ten temat w Internecie, i nie jestem pewien, czy wiedzieli, o czym mówią.

Mam na myśli różnicę między:

class A
{
 public: 
      friend class B;
 };

I

class A
{
 private: //or nothing as the default is private
      friend class B;
 };
Jest jakaś różnica?
Author: BIU, 2011-06-20

3 answers

Nie, Nie ma różnicy - po prostu powiedz, że Klasa B jest przyjacielem klasy A i teraz może uzyskać dostęp do swoich prywatnych i chronionych członków, to wszystko.

 116
Author: sharptooth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-20 06:48:06

Ponieważ składnia friend class B nie deklaruje członka klasy A, więc nie ma znaczenia, gdzie go napiszesz, class B jest przyjacielem klasy A.

Ponadto, jeśli napiszesz friend class B w protected sekcji A, to nie oznacza to, że B ma dostęp tylko do protected i public członków A.

Zawsze pamiętaj, że gdy B zostanie przyjacielem A, może uzyskać dostęp do każdego członka A, bez względu na to, w której sekcji napiszesz friend class B.

 31
Author: Nawaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-20 06:52:34

Deklaracja znajomego pojawia się w ciele klasy i przyznaje funkcję lub inną klasę dostęp do prywatnych i chronionych członków klasy, w której pojawia się deklaracja przyjaciela.

Jako takie specyfiki dostępu nie mają wpływu na znaczenie deklaracji znajomych (mogą występować w sekcjach private: lub public:, bez różnicy).

 0
Author: goyuiitv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-29 17:20:48