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