同じクラスのオブジェクトがお互いのプライベート データにアクセスできるのはなぜですか?
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; }
このコードでは、TrivialClass にはプライベート メンバー変数 mData と、 mData への参照を返すパブリック メンバー関数 getData。オブジェクト a と b が作成されると、どちらも getData 関数を通じて互いのプライベート データにアクセスできます。
これが可能となるのは、 C のアクセス制御が次のルールに基づいているためです:
mData はプライベート メンバーであるため、TrivialClass クラス内からのみアクセス可能である必要があります。ただし、アクセス制御はクラスごとに行われるため、同じクラスのオブジェクトは引き続き互いのプライベート メンバーにアクセスできます。
この動作はすべてのプログラミング言語に存在するわけではありません。 Java などの一部の言語には、真のオブジェクトごとのアクセス制御があり、同じクラスのオブジェクトは相互にプライベート データにアクセスできません。
以上が同じクラスの C オブジェクトはどのようにして互いのプライベート メンバー変数にアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。