為什麼同一類別的物件可以存取彼此的私有資料?
考慮以下程式碼片段:
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類中一個物件可以存取另一個物件的私有資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!