将友元函数/类声明为私有(private)或公共(public),是否有区别?我在网上找不到相关资料。
我是指以下两种情况之间的区别:
class A
{
public:
friend class B;
};
和
class A
{
private: //or nothing as the default is private
friend class B;
};
有什么区别吗?
没有区别,您只需告诉B类是A类的好友,并且现在可以访问它的私有和受保护成员,就这样。
operator==(T, T)
,并使用friend
作为实现细节,以便operator==
可以出现为非成员函数。在我看来,这种友元关系不应出现在公共接口中(例如Doxygen生成的接口)。 - TemplateRex由于语法 friend class B
不声明类 A
的成员,因此无论在哪里编写,类 B
都是类 A
的友元。
此外,如果您在 A
的 protected
部分中编写 friend class B
,则并不意味着 B
只能访问 A
的 protected
和 public
成员。
请记住,一旦 B
成为 A
的友元,它就可以访问 任何 A
的成员,而不管您在哪个部分写入 friend class B
。
friend
类的实例访问声明为private
的类中的成员。在这个例子中,类B的实例可以访问类A的私有成员。 - BIU