フレンド関数/クラスをプライベートまたはパブリックとして宣言するのに違いはありますか?このオンラインについては何も見つけられないようです。
私は以下の違いを意味します:
class A
{
public:
friend class B;
};
そして
class A
{
private: //or nothing as the default is private
friend class B;
};
違いはありますか?
いいえ、違いはありません。クラスBがクラスAの友人であり、プライベートメンバーと保護メンバーにアクセスできるようになったというだけです。
シンタックスfriend class B
はクラスA
のmemberを宣言しないため、どこで記述してもかまいませんそれ、クラスB
はクラスA
のフレンドです。
また、protected
のA
セクションにfriend class B
を記述した場合、B
がアクセスできるのはprotected
およびpublic
メンバーのみであるという意味ではありませんof A
。
B
がA
の友達になると、A
のメンバーanyメンバーにアクセスできることを常に覚えておいてください。どのセクションにfriend class B
と書くかは重要です。
フレンド宣言はクラス本体に表示され、フレンド宣言が表示されるクラスのプライベートおよび保護されたメンバーに関数または別のクラスへのアクセスを許可します。
そのため、アクセス指定子はフレンド宣言の意味に影響を与えません(それらはprivate:またはpublic:セクションに表示でき、違いはありません)。