Объявление друга в C ++ - разница между публичным и приватным - PullRequest
125 голосов
/ 20 июня 2011

Есть ли разница между объявлением функции / класса друга как приватной или общедоступной? Кажется, я ничего не могу найти в Интернете.

Я имею в виду разницу между:

class A
{
 public: 
      friend class B;
 };

и

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

Есть ли разница?

Ответы [ 3 ]

125 голосов
/ 20 июня 2011

Нет, нет никакой разницы - вы просто говорите, что класс B является другом класса A и теперь может получить доступ к своим закрытым и защищенным членам, вот и все.

33 голосов
/ 20 июня 2011

Поскольку синтаксис friend class B не объявляет член класса A, поэтому не имеет значения, где вы его пишете, класс B является другом класса A.

Кроме того, если вы пишете friend class B в protected разделе A, это НЕ означает, что B может получить доступ только к protected и public членам A.

Всегда помните, что как только B становится другом A, он может получить доступ к любому члену A, независимо от того, в каком разделе вы пишете friend class B.

0 голосов
/ 29 мая 2018

Объявление друга появляется в теле класса и предоставляет функции или другому классу доступ к закрытым и защищенным членам класса, в котором появляется объявление друга.

Как таковые, спецификаторы доступа не влияют на значение объявлений друзей (они могут появляться в приватных: или в публичных: разделах, без разницы).

...