條款32:確定你的public繼承塑模出is-a關係
以public繼承的類,其父類的所有的性質都應該使用與子類,任何需要父類的地方都應該能用子類來代替,任何子類型別的物件也同時是父類的:
student,在現實生活中,我們要注意public的關係,例如對於企鵝和鳥,正方形和矩形等,看起來可能是public繼承比較合適,class person;
class student : public person;
void eat(const person& p);
void study(const student& s);
person p;
student s;
eat(p);
eat(s);
study(s);
study(p); //錯誤
在上面的例子中student是person的子類,以public繼承,因為每個student都是乙個person,每個person的屬性都是適合
但是企鵝並不含有鳥的一切特徵,例如飛,正方形也不具有矩形的所有特徵,例如正方形不會出現長和寬不相等的情況,因此
在設計public繼承的時候要注意!
請記住:
Effective C 讀書筆記3
條款8 別讓異常逃離析構函式 c 並不禁止析構函式吐出異常,但不鼓勵這樣做。但如果你的析構函式必須執行乙個動作,而該動作可能會在失敗時丟擲異常,該怎麼辦?兩個辦法解決 一是 如果丟擲異常程式就結束,通常通過呼叫abort函式完成 dbconn dbconn catch 如果程式遭遇乙個於析構期間發生...
effective C 讀書筆記 3
1 p18 頁 經過我的實驗 void f1 const a a 和void f2 a const a 是不同的!莫非書上有錯?2 stl迭代器 天生就是 t const ptr 如果需要乙個 const t ptr 則需要的是 const iterator 3 這個表要記一下子 3 non con...
《effective C 》讀書筆記
1,c 關鍵字explicit c 中,乙個引數的 建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是個 構造器,2 是個預設且隱含的型別轉換操作符 所以,有時候在我們寫下如 aaa 這樣的 且恰好 的型別正好是aaa單引數構造器的引數型別,這時候 編譯器就自動呼...