1.內聯:寫在類內或外部聲明inline(編譯器判斷是否內聯,不是滿足上述條件就一定內聯),優點更快 2.protected:派生類可以直接調用基類的protected成員 3.class類內預設private,struct內預設public 4.構造函數最優寫法,用初始化(只有構造函數有)效率比在 ...
1.內聯:寫在類內或外部聲明inline(編譯器判斷是否內聯,不是滿足上述條件就一定內聯),優點更快
2.protected:派生類可以直接調用基類的protected成員
3.class類內預設private,struct內預設public
4.構造函數最優寫法,用初始化(只有構造函數有)效率比在函數中寫更高(因編譯器先進行初始化再執行函數)
5.const T: T固定;T const: *固定
6.確實有把構造函數放在private里的需求,如單例模式:通過將構造函數寫在private里來防止該類對象被創建,通過public里的static函數或在聲明static對象時來調用
7.const函數const在函數體{}前加,只能修飾成員函數,不改變數據內容的都要設為const函數
8.如非必要(想保證原數據不變且需要改變數據副本,或源數據在生命周期結束後仍會被使用),都傳入傳出引用# 9.main()方法是固定的:public static void main(String[] args)
9.friend自由取得private成員,這就導致同一個class中的各個示例互為friend
10.類內操作符重載需要預設存在this參數,this由編譯器提供
11.可直接向引用參數中傳值
12.對於有些可以連續調用的函數(如:a+=b+=c;,cout<<a<<b;)要考慮返回值不要用void
13.淺拷貝:指針指向被拷貝對象 深拷貝:將拷貝對象的內容給拷貝
14.三/五法則:如果一個類有非預設的析構函數,則必須有非預設的拷貝構造函數(移動構造函數)和拷貝賦值運算符(和移動賦值運算符)
15.拷貝賦值運算符重載時要檢測是否是自我賦值
16.new是先調用記憶體再構造函數,delete是先析構再釋放記憶體
17.new數組,要delete[]
18.static成員函數只能處理static數據,但可被非static的class對象調用
19.template與template這兩個通用
20.explicit用來修飾單個參數的構造函數,表示該構造函數只能顯式調用,禁止隱式轉換。
21.對於類包類(類a中有類b成員)構造先b後a,析構先a後b
22.delegation可在cpp中實現類似介面的東西,具體為介面類內封裝一個private實現類指針,具體實現功能全藉助這個指針指向的實現類來實現。這會導致拷貝多個對象則會指向同一個實現類對象。
23.對於父類,析構函數必須是虛函數
24.純虛函數:virtual 返回值 function()=0;
25.delegation可實現一份a類數據給多個b類對象使用(a類中包含b類指針數組)
26.私有static成員要先在類外進行全局定義
27.轉換函數operator 類型()const,寫在類內public中,當對象需要隱式類型轉換時編譯器自動調用
28.當需要將其他類型隱式轉換為a類時,編譯器會自動調用符合的a類構造函數(如果有的話)
29.當一條語句同時滿足27,28兩種情況時,會出現歧義,可以通過在構造函數前加explicit來禁止其隱式調用
30.仿指針類(如智能指針,迭代器)類內必會重載 “*” 和 “->”
31.仿函數類類內必會重載“()”
32.函數模板在使用時不必指明“T”,編譯器會進行實參推導,類模板需要
33.模板和重載是編譯時多態,虛函數重寫是運行時多態
34.模板的參數仍可以是模板,特例化時所用的作為參數的模板的參數數量必須定義時作為參數的模板的參數相對應,如:
template<typename T,template<typename T,typename u>class cl>
class a {};
a<int, vector>;