同じクラス オブジェクトのデータ アクセシビリティについて
C では、多くの場合、クラスには機密情報や内部情報をカプセル化するプライベート データ メンバーが含まれます。ただし、同じクラスに属するオブジェクトが相互にプライベート データにアクセスできるというのは直観に反しているように思えるかもしれません。この現象により、「なぜこれが許可されるのですか?」という疑問が生じます。
C のアクセス制御
他のプログラミング言語とは異なり、C はクラス レベルでアクセス制御を実装します。これは、プライベート データ メンバーがクラス内で宣言されている場合、そのクラスの外部のすべてのエンティティは本質的にアクセスできないことを意味します。ただし、このルールには例外があります。
例外: 同一クラスのアクセス性
同じクラスから作成されたオブジェクトは共通のブループリントを共有するため、アクセス権を持ちます。お互いのプライベートデータに。これは、アクセス制御ルールがオブジェクトごとではなくクラスごとに適用されるためです。
理由
この設計上の決定は、プライベートデータメンバーの目的。プライベート データは、外部アクセスからデータを保護することを目的としていますが、同じクラス内の他のオブジェクトから隠す必要はありません。実際、同じクラスのオブジェクト間でプライベート データを共有すると、効率的で再利用可能なコードが可能になることがよくあります。
例
次のコードを考えてみましょう:
class TrivialClass { public: TrivialClass(const std::string& data) : mData(data) {} const std::string& getData(const TrivialClass& rhs) const { return rhs.mData; } private: std::string mData; }; int main() { TrivialClass a("fish"); TrivialClass b("heads"); std::cout << "b via a = " << a.getData(b) << std::endl; return 0; }
オブジェクト a は getData メソッド内でオブジェクト b のプライベート mData データ メンバーにアクセスできるため、このコードは正常にコンパイルされ、実行されます。この機能により、クラス内でのデータ共有とコラボレーションが容易になります。
以上が同じクラスの C オブジェクトがお互いのプライベート データにアクセスできるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。