讀書筆記 Effective C 二

2021-07-15 07:58:13 字數 1301 閱讀 4520

條款20:寧以pass-by-reference-to-const替換pass-by-value

class person;

class student: public persion;

假設有函式

bool validatestudent(student s);

student plato;

bool platoisok = validatestudent(plato);

student的copy建構函式會被呼叫,以plato為藍本將s初始化。當離開函式validatestudent時,s會被銷毀。

1.但不僅僅如此,student被構造時,其兩個string物件也會被構造,且它繼承之person,那麼person會被構造,且person中的兩個string也會被構造,因此總共有「六次建構函式和六次析構函式」

避免上述的最好方式是使用pass by referenc-to-const

2.by reference方式傳遞引數可以避免(slicing)物件分割問題。當乙個dervied class物件以by value方式傳遞並被視為乙個base class物件,這樣在函式內部,就無法使用該derived class的多型性

void printname(window w);假設現在w是乙個dervied class,那麼顯然這種方式是無法在函式內部使用w的多態函式的。

對於內建型別(int),stl的迭代器,函式物件,pass by value 要比 pass by referenc效率高些。

條款21:必須返回物件時,別妄想返回其reference

因為在函式的內部,分配的物件是stack物件,當函式返回時,該變數就會被銷毀,reference跟指標類似,如果變數已經不存在,它們也是完全沒有意義的。

因此最好的方法是,必須返回物件,即使會有構造成本和析構成本

條款22:將成員變數宣告為private

切記將成員變數宣告為private。這可賦予客戶訪問資料的一致性,可細微劃分訪問控制,允諾約束條件獲得保證,並提供class作者以充分的實現彈性

protected並不必public更具有封裝性,因為proteced的改變,會應影響所有的drived class.

條款23:寧以non-member, non-friend替換member函式

條款24:

條款25:

Effective C 讀書筆記二

resource management designs and declarations總結 c 編譯器預設提供了三個建構函式和乙個析構函式 class empty default constructor empty const empty rhs copy constructor empty de...

《effective C 》讀書筆記

1,c 關鍵字explicit c 中,乙個引數的 建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是個 構造器,2 是個預設且隱含的型別轉換操作符 所以,有時候在我們寫下如 aaa 這樣的 且恰好 的型別正好是aaa單引數構造器的引數型別,這時候 編譯器就自動呼...

Effective C 讀書筆記

一 讓自己習慣c 1 條款01 視c 為聯邦語言 c 的組成可分為四部分 1.c c 仍然以c語言為基礎。區塊 語句 預處理 內建資料型別 陣列 指標等都來自c。2.object oriented c c with classes所訴說的 classes 包括構造和析構 封裝 繼承 多型 virtu...