Friend declaration in C++ - difference between pub

2019-01-16 05:20发布

问题:

Someone told me that there is a difference between declaring a friend class in the public or private areas of the class, but I can't seem to find anything about this online, and I'm not sure they knew what they were talking about.

I mean the difference between:

class A
{
 public: 
      friend class B;
 };

and

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

Is there a difference?

回答1:

No, there's no difference - you just tell that class B is a friend of class A and now can access its private and protected members, that's all.



回答2:

Since the syntax friend class B doesn't declare a member of the class A, so it doesn't matter where you write it, class B is a friend of class A.

Also, if you write friend class B in protected section of A, then it does NOT mean that B can access only protected and public members of A.

Always remember that once B becomes a friend of A, it can access any member of A, no matter in which section you write friend class B.



回答3:

The friend declaration appears in a class body and grants a function or another class access to private and protected members of the class where the friend declaration appears.

As such access specifiers have no effect on the meaning of friend declarations (they can appear in private: or in public: sections, with no difference).