私の経験では、カプセル化を破るために使用される頻度と比較して、実際にデータのカプセル化を強化するフレンド (またはミュータブル、少し似ています) のケースはまれです。
私にとってはめったに役に立ちませんが、使用する場合は、以前は単一のクラスだったクラスを、共通のデータ/機能にアクセスする必要がある2つの別個のクラスに分割する必要があった場合です。
Outlaw Programmer のコメントに対応するために編集します。これには完全に同意します。それらを分割した後にクラスを友達にする以外のもう 1 つのオプションは、パブリック アクセサーを作成することです。これにより、カプセル化が壊れることがあります。一部の人々は、フレンドリー クラスが不適切に使用されているのを見て、カプセル化が何らかの形で壊れていると考えていると思います。多くの人は、それが正しく使用されているコードを見たことがないでしょう。それはまれなことだからです。私はあなたの言い方が好きですが、親しみやすさは、クラスを分割することを許可しないことと、すべてを一般に公開することの間の良い中間点です.
David Thornley に返信する編集: C++ がこのようなことを可能にする柔軟性は、C++ に入った設計上の決定の結果であることに同意します。それが、柔軟な言語で一般的に良いスタイルと悪いスタイルを理解することがさらに重要になる理由だと思います。Java の観点では、フレンド クラスを提供しないようにするべきではありませんが、C++ プログラマーとして、これらの非常に柔軟でありながら誤用されることもある言語構造の適切な使用法を定義することは、コミュニティとしての私たちの責任です。
Tom に対応するように編集: Mutable は必ずしもカプセル化を破るわけではありませんが、実際の状況で見た mutable キーワードの使用の多くはカプセル化を破ります。そもそもミュータブルの適切な使用法を実際に見つけて理解する必要があります。