Есть ли разница между объявлением функции / класса друга как частной или публичной? Я не могу найти ничего об этом в Интернете.
Я имею в виду разницу между:
class A
{
public:
friend class B;
};
а также
class A
{
private: //or nothing as the default is private
friend class B;
};
Есть разница?
friend
класса получать доступ к членам, объявленнымprivate
в классе, который сделал объявление. В случае этого примера экземпляр класса B может получить доступ к закрытым членам класса AОтветы:
Нет, нет никакой разницы - вы просто говорите, что класс B является другом класса A и теперь может получить доступ к его закрытым и защищенным членам, вот и все.
источник
friend
деталь реализации или часть интерфейса?class Friend
которые могут получить доступ ко всем частным членам текущего класса.operator==(T, T)
использование частных данных-членовT
и используетеfriend
в качестве детали реализации, чтобы онаoperator==
могла отображаться как не-член. ИМО, эта дружба не должна отображаться в общедоступном интерфейсе (например, будет сгенерирована Doxygen)Поскольку синтаксис
friend class B
не объявляет член классаA
, поэтому не имеет значения, где вы его пишете, классB
- друг классаA
.Кроме того, если вы пишете
friend class B
вprotected
разделеA
, то это НЕ означает, чтоB
можно получить доступ только к членамprotected
и .public
A
Всегда помните, что,
B
став другомA
, он может получить доступ к любому членуA
, независимо от того, в каком разделе вы пишетеfriend class B
.источник
Объявление друга появляется в теле класса и предоставляет функции или другому классу доступ к закрытым и защищенным членам класса, в котором появляется объявление друга.
Таким образом, спецификаторы доступа не влияют на значение объявлений друзей (они могут отображаться в разделах private: или public: без разницы).
источник