web-dev-qa-db-ja.com

C ++でのフレンド宣言-パブリックとプライベートの違い

フレンド関数/クラスをプライベートまたはパブリックとして宣言するのに違いはありますか?このオンラインについては何も見つけられないようです。

私は以下の違いを意味します:

class A
{
 public: 
      friend class B;
 };

そして

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

違いはありますか?

127
BIU

いいえ、違いはありません。クラスBがクラスAの友人であり、プライベートメンバーと保護メンバーにアクセスできるようになったというだけです。

126
sharptooth

シンタックスfriend class BはクラスAmemberを宣言しないため、どこで記述してもかまいませんそれ、クラスBはクラスAのフレンドです。

また、protectedAセクションにfriend class Bを記述した場合、Bがアクセスできるのはprotectedおよびpublicメンバーのみであるという意味ではありませんof A

BAの友達になると、Aのメンバーanyメンバーにアクセスできることを常に覚えておいてください。どのセクションにfriend class Bと書くかは重要です。

33
Nawaz

フレンド宣言はクラス本体に表示され、フレンド宣言が表示されるクラスのプライベートおよび保護されたメンバーに関数または別のクラスへのアクセスを許可します。

そのため、アクセス指定子はフレンド宣言の意味に影響を与えません(それらはprivate:またはpublic:セクションに表示でき、違いはありません)。

0
goyuiitv