1.函數(shù)重載是為了實現(xiàn) 虛函數(shù)的副產(chǎn)品,函數(shù)重載引進了操作符重載,但也引入了工程函數(shù)的歧義性。
反例:定義了fun(double)和fun(float),當我們調(diào)用fun(int)會出現(xiàn)歧義。
2.構(gòu)造函數(shù)的初始化 盡量使用初始化列表,這樣做的目的是在構(gòu)造之前初始化成員,如果定義在結(jié)構(gòu)體中,只能在調(diào)用構(gòu)造函數(shù)時初始化成員。
兩種情況下必須使用初始化列表:
1)const成員
2)子類的父類沒有默認的構(gòu)造函數(shù),子類在構(gòu)造構(gòu)造 必須先通過初始化列表構(gòu)造父函數(shù)。
3.多態(tài)的基礎是容器。虛函數(shù)的目的 是為了實現(xiàn)多態(tài),多態(tài)是因,虛函數(shù)是果。
面向?qū)ο蟮?程序設計方法需要多態(tài),但并不需要虛函數(shù),虛函數(shù)只是C++語言中特有的方法。
面向?qū)ο?需要對象的概念,但并不需要類,所以有的程序語言并沒有類的概念。
4.函數(shù)傳遞對象參數(shù)時,需要傳遞引用,而不是傳值,這是因為在對象傳值過程中,會調(diào)用拷貝構(gòu)造函數(shù),效率比較低。
拷貝構(gòu)造函數(shù)的參數(shù)必須是引用,如果是傳值傳參會造成無窮調(diào)用拷貝構(gòu)造函數(shù)。
5.組合是包含一個對象,而聚合是包含一個類指針。組合控制生死,聚合不控制,就是拿過來用一下。
從耦合性上講 繼承>組合>聚合,我們在編寫代碼時總是希望弱耦合,所以盡量選擇聚合和組合。繼承主要針對抽象類,繼承接口。
6.對象決定虛函數(shù),類決定非虛函數(shù)。
7.析構(gòu)函數(shù)盡量選擇虛函數(shù),虛析構(gòu)函數(shù)具有特殊的性質(zhì),即調(diào)用虛析構(gòu)函數(shù)時會先調(diào)用父虛構(gòu)函數(shù)。