A、B、C という 3 つのクラスがあるとします。A と B はフレンドです (双方向)。また、B と C もフレンドです (双方向)。A には B へのポインターがあり、B には C へのポインターがあります。なぜ A はポインターを通じて C のプライベート データにアクセスできないのでしょうか?
明確にするために:これは純粋に理論的な C++ 言語の質問であり、設計アドバイスの質問ではありません。
ベストアンサー1
C++ における友情は推移的ではありません:
ジョンは私の友人であり、いつでも私のワイヤレス接続を使用できます (私は彼を信頼しています)。
しかし、ジョンの友人のティムは無駄遣いをする人で、ジョンは私の友人ですが、私はティムを友人として含めず、そのため彼に私のワイヤレス接続を使用させません。
友情は受け継がれない
また、ジョンの子供たちは不良集団なので、私も彼らを信用していません。彼らは間違いなく私の友人ではありませんし、私が信頼している自分の子供たちでもありません。
私たちの子供たちは直接無線にアクセスすることはできませんが、私たちを介してアクセスすることができます。つまり、ジョンの子供たちはジョンを介してアクセスすれば私の無線にアクセスできます(つまり、彼らは監視されており、保護されたジョン著。
また、友情は対称的ではありません。
ジョンは政府関係の仕事をしているため、残念ながら、特に無線に関しては誰も信頼できません。
あなたは常にあなた自身の親友です。
これにより、実際のアクセスがない場合でも、別のオブジェクトのプライベート メンバーにアクセスできるコピー コンストラクターなどが可能になります。
だから、私のクローン全員とも自動的に友達になります :-) なぜなら、彼らは私自身の別のインスタンスにすぎないからです。