同じクラスのオブジェクトがお互いのプライベート データにアクセスできるのはなぜですか?
次のコード スニペットを考えてみましょう:
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; };
奇妙なことに、getData() は別の TrivialClass オブジェクトのプライベート メンバー mData にアクセスできます。これが許可されるのはなぜですか?
クラスごとのアクセス制御
C では、アクセス制御はオブジェクトごとではなくクラスごとに実装されます。これは、同じクラスのすべてのオブジェクトが、その状態や相互作用する他のオブジェクトに関係なく、クラスのプライベート メンバーに対して同じアクセス権を持っていることを意味します。
コンパイル時実装
C のアクセス制御はコンパイル時に強制されるため、オブジェクトごとの制御を実装するのは非現実的です。ただし、クラスごとの制御はコンパイル中に効率的かつ確実に実装できます。
保護されたアクセス
アクセス制御は通常クラスごとですが、保護されたアクセス指定子は次の機能を提供します。オブジェクトごとの制御の基本的な形式。ただし、この制御は、真のオブジェクトごとのアクセス制御で可能となるものと比較すると制限されています。
結論として、 C のアクセス制御メカニズムは C のアクセス制御メカニズムが動作するため、同じクラスのオブジェクトは相互にプライベート データにアクセスできます。クラスごとに。この設計上の決定により、コンパイル中に効率的かつ信頼性の高いアクセス制御を適用できるようになります。
以上が同じ C クラス内のオブジェクトが別のオブジェクトのプライベート データにアクセスできるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。