作者tinlans ( )
看板C_and_CPP
標題Re: [問題] class繼承問題 請教
時間Wed Oct 28 07:23:10 2009
※ 引述《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