看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 4.有個不解的地方是 老爸的private資料明明就繼承給兒子 : 兒子看的到卻不能用 頂多透過 老爸的function去修改數值 : 然後要get時 再透過老爸的get function去get... : 這樣為啥不直接老爸就寫成protected就好 : 有沒有什麼case是老爸必定要寫private 不然會有什麼漏洞或是什麼問題產生? 基本上 OO 程式的原則, 就是所有 data members 都要是 private, 想開放給兒子去存取是把 setter/getter 標成 protected, 不准兒子存取就是連這兩樣都 private 掉甚至是不提供, 這單純只是類別的封裝概念而已, 所以為了符合這種概念都會把 data members 直接 private 起來。 如果你不想探討概念性的東西, 真的是有必要的例子也很好找, 像是你為了加快程式速度可能會寫類似這樣的東西: class MyClass { public: ... ResultT query() const; private: ... mutable ResultT cache_; mutable bool initialized_; }; ResultT MyClass::query() const { if(initialized_) return cache_; else { cache_ = ...; initialized_ = true; return cache_; } } 只要這個 query method 被執行過一次, 那就能快速的取得結果, 被執行過一次的狀態用 initialized_ 這個 data member 去記錄, 之前算出來的結果暫存在 cache_ 這個 data member, 一般來說你絕對不會希望 initialized_ 這種東西被兒子隨便修改吧? -- Ling-hua Tseng (uranus@tinlans.org) Department of Computer Science, National Tsing-Hua University Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://www.tinlans.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.115.152 ※ 編輯: tinlans 來自: 118.160.115.152 (10/28 07:25)
VictorTom:推....:) 10/28 09:21
ledia:真是簡明易懂, 推~ 10/28 11:40
QQ29:謝謝t大 我知道意思了 10/28 14:58