C ++中的朋友声明 - 公共和私人之间的区别

时间:2011-06-20 06:45:44

标签: c++ private friend public

将朋友功能/类声明为私有或公共是否有区别?我似乎无法在网上找到任何相关信息。

我的意思是:

之间的区别
class A
{
 public: 
      friend class B;
 };

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

有区别吗?

4 个答案:

答案 0 :(得分:122)

不,没有区别 - 你只是说B级是A级的朋友,现在可以访问其私人和受保护的成员,就是这样。

答案 1 :(得分:33)

由于语法friend class B未声明类A成员,因此在您编写它的位置无关紧要,类B是班级A的朋友。

另外,如果您在friend class B的{​​{1}}部分中写protected,那么这并不意味着A只能访问B和{{1} } protected的成员。

永远记住,public成为A的朋友后,无论您在哪个部分B,它都可以访问 A的任何成员。{ 1}}。

答案 2 :(得分:1)

c++ 有“隐藏的朋友”的概念:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1601r0.pdf

这仅适用于内联定义的友元函数。这使得函数只能通过依赖于参数的查找来找到,从封闭的命名空间中删除它们。

答案 3 :(得分:0)

友元声明出现在类主体中,并授予函数或其他类访问友元声明所在类的私有和受保护成员的权限。

因为这样的访问说明符对朋友声明的含义没有影响(它们可以出现在私人:或公开:部分,没有区别)。