亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么同一類的對象可以訪問彼此的私有數據?

為什么同一類的對象可以訪問彼此的私有數據?

C++
拉莫斯之舞 2019-08-12 16:01:31
為什么同一類的對象可以訪問彼此的私有數據?為什么同一類的對象可以訪問彼此的私有數據?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完全可以從對象b訪問私有數據并將其返回。為什么會這樣?我認為私人數據是私人的。(我開始試圖理解pimpl習語中的復制構造函數,但后來我發現我甚至不理解這種簡單的情況。)
查看完整描述

3 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超8個贊

因為這就是它在C ++中的工作方式。在C ++中,訪問控制基于每個類而不是基于每個對象。

C ++中的訪問控制是作為靜態編譯時功能實現的。我認為很明顯,在編譯時實際上不可能實現任何有意義的每對象訪問控制。只有每類控制才能實現。

受保護的訪問規范中存在一些每對象控制的提示,這就是為什么它甚至在標準中有自己的專用章節(11.5)。但是,那里描述的任何每個對象的特征仍然相當簡陋。同樣,C ++中的訪問控制意味著在每個類的基礎上工作。


查看完整回答
反對 回復 2019-08-12
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

這是一個很好的問題,我最近遇到過這個問題。我與同事們進行了一些討論,這是我們討論的總結:這是設計的。這并不意味著這種設計對于所有情況都是完全合理的,但必須考慮為什么選擇每個類私有。我們可以想到的可能原因包括:

首先,每個實例訪問控制的成本可能非常高。這個帖子中的其他人已經討論過這個問題。理論上,這可以通過指針檢查來完成。但是,這不能在編譯時完成,并且只能在運行時完成。因此,您必須在運行時識別每個成員的訪問控制,并且當它被違反時,可能只會引發異常。成本很高。

其次,每個類訪問控制都有自己的用例,比如copy constructor或operator =。如果每個實例都有訪問控制,那么很難實現它們。

此外,訪問控制主要來自編程/語言角度,用于如何模塊化/控制對代碼/成員的訪問,而不是數據


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 529 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號