條款26:盡可能延後變數定義式的出現時間
除非在變數要使用的那一刻,否則不要提前定義變數。對於迴圈來說,當你不在迴圈外使用變數時,盡量在迴圈內定義變數。
條款39:明智而審慎地使用private繼承
private繼承並不意味is-a關係,即不是真正意義上的繼承,而是implemented-in-terms-of(根據某物實現),類似於一種has-a的組合關係。那麼什麼時候使用組合,什麼時候使用private繼承呢?一般來說,當你要實現的類與另乙個類是關聯關係時,就要使用組合關係,而如果你除了相互關聯的關係外,還有別的需求:比如,需要訪問另乙個的protected成員,或需要重新定義其一或多個virtual函式時,可以考慮使用private繼承。其他has-a一般就是常見的組合關係。
條款40:明智而審慎地使用多重繼承
1.多重繼承會存在歧義。如
class a ;
class b ;
class c : public class a,public class b ;
當例項化c,並呼叫test函式時,就會出現歧義。
c te;
te.test();//歧義
解決的方法就是將public繼承改為virtual public繼承,但是virtual繼承是有代價的,使用virtual繼承的class產生的物件往往比non-virtual繼承的體積大,而且,訪問其base時的速度也會變慢。
2.多重繼承不要輕易使用,能用單繼承解決的問題不要用多繼承。多重繼承涉及的情節是:需要其中乙個類作為base類,另乙個類與當前子類是復合關係(條款39)
Effective C 讀後感筆記
1.賦值不一定是初始化。例如 aclassname aclassname const std string name,const std string address,const std list phones aclassname aclassname const std string name,...
Effective c 學習筆記(六)
阻止拷貝的關鍵是 由於所有編譯器產出的函式都是public,可以將拷貝建構函式和拷貝運算子宣告為private。明確宣告乙個成員函式,可以阻止編譯器自動建立其專屬版本,而令這些函式為private,可以阻止使用者呼叫它。class home 當使用者拷貝home物件,編譯器會報錯。為阻止拷貝動作而設...
Effective C 學習筆記 《六》
其實這一節的內容是和item5緊密相連的,上一節的核心圍繞著編譯器會自動生成類的一些方法,那麼這一節就是圍繞著如何去避免這些自動生成的方法。前一節說到如果想要編譯器避免自動生成,解決方法就是自己來寫乙個,而且要保證寫的這個 用不了 所以辦法就是宣告為private修飾的。但是這樣做其實是不夠安全的,...