第12章 類12.4.1 建構函式初始化式
1 初始化const或參考型別資料成員的唯一機會是在建構函式初始化列表中。
2 在建構函式初始化列表中,成員初始化的次序最好是按各個成員變數在類中聲明的順序初始化。不然會造成用一個未初始化的成員變數去初始化另外一個成員變數。當然也要儘可能的避免使用成員變數來初始化其它成員變數。
12.4.2 預設實參與建構函式
1 最好在建構函式時提供一個預設實參。
12.4.3 預設建構函式
1 合成的預設建構函式採用與“變數初始化相同的規則”來初始化其內部成員。
2 類內部的類類型的成員通過各自的預設建構函式進行初始化。
3 內建和複合類型的成員,如指標和數組。只有當類對象定義為全域範圍中才進行初始化;對象若定義在局部範圍時,內建和複合類型的成員不進行初始化。
4 每個建構函式應該為每個內建或複合類型的成員提供初始化。沒有初始化內建或複合類型成員的建構函式,將使那些成員處於未定義的狀態。
5 若不給這些成員初始化,除了作為賦值目標外,以任何方式使用一個未定義的成員都是錯誤的。因此,最好使用建構函式為每個成員設定一個明確的已知狀態,這樣才不會出現錯誤。
12.6.1 static 類成員
1 不像普通的資料成員,static資料成員獨立於該類的任意對象而存在;每個static資料成員是與類關聯的對象,並不與該類的對象相關聯。
2 使用static成員而不使用全域對象有三個優點:
1)static成員的名字是在類的範圍中,因此可以避免與其它類的成員或全域對象名字衝突。
2)可以實施封裝。static成員可以是私人成員,而全域對象不可以。
3)通過閱讀程式容易看出static成員是與特定類關聯的。這種可見度可清晰的顯示程式員的意圖,也即代碼清晰。
3 static
成員函數是類的組成部分但不是任何對象的組成部分。static成員函數也不會有this指標。此函數可以直接存取所屬類的static成員,但不能直接使用非static成員。
4 可能通過範圍操作符從類中直接調用static成員,或者通過對象、引用或指向該類類型對象的指標間接調用。
5 static資料成員必須在類定義體的外部定義。它不是通過類的建構函式進行初始化,而是應該在定義時進行初始化。
6 非static資料成員不能用作預設實參,因為它的值不能獨立於所屬的對象而使用。使用非static資料成員作預設實參,將無法提供對象以擷取該成員的值,因而是錯誤的。
7 類的靜態成員函數可以通過類的對象訪問類的非待用資料成員。