C++ のフレンド関数に関連する疑問があります。フレンド関数はクラスのメンバー関数ではなく、メインから直接呼び出すことができます。friend
では、関数を 内またはprivate
のpublic
一部に保持すると、どのような違いが生じますかclass
。friend
私は一般的に、関数が常に公開部分にあることに気付きました。どのシナリオで、friend
関数を 内に保持する必要がありますかprivate
。
5 に答える
コンパイラは、フレンド関数がクラスのプライベートまたはパブリック (または保護) セクションにあるかどうかに注意を払いません。ほとんどの人は公開セクションに配置しますが、どこに配置しても公開されます。
public:
またはprivate:
クラスの一部で宣言しても問題ありません。関係なく同じように機能します。
friend
キーワードは、クラスの一部ではない別の関数へのアクセスを許可するためにここにありますprivate
。クラスの一部ではないため、指定子の影響を受けません。public/private
セクションにフレンド宣言がある理由の 1 つprivate
は、それらがアクセスできるはずのメンバー関数またはオブジェクトと一緒に保持できることです。
それ以外は違いはありません。
友好宣言はどこに書いても構いません。クラス パーツ (public、private、または protected) の内部に存在する可能性がありますが、関数または集合体の外部に配置する必要があります。
www.cprogramming.com からの良い例と説明を次に示します。
あるクラスが別のクラスのプライベート変数を参照できると便利な場合がよくありますが、これらの変数は、そのクラスがサポートするパブリック インターフェイスの一部にするべきではありません。たとえば、バイナリ ツリーを作成している場合、プライベート データを持つ Node クラスを使用したい場合がありますが、実際にノードを結合する関数が、作業することなくデータに直接アクセスできると便利です。ノード インターフェイスを介して。場合によっては、アクセサ関数がデータへの間接的なアクセスを提供することさえ適切でない場合があります。