在c++中,當我們自定義的類中出現了某些特殊型別的成員變數時,為保證初始化過程的正確性,編譯器要求它們的初始化過程必須通過初始化列表來進行,下邊就現有課程已經學到的知識範圍我們簡單來進行分類列舉:
1、大概有哪幾種型別的成員變數的初始化工作必須要借助初始化列表來進行
* 類中的const修飾的成員變數的初始化
* 類中的成員變數為另乙個類的類物件,即組合關係(尤其是作為成員的類物件對應的類中沒有預設建構函式可以使用時,則必須在初始化列表中對該物件進行和其建構函式型別匹配的初始化動作)
* 類中的成員變數為引用
* 當前類繼承自某個類時,且父類中沒有預設建構函式可以使用,則此時必須在初始化列表中進行父類的建構函式的手工呼叫
注:當類中的成員變數為引用時,特別的,我們不能使用任何無參建構函式,此時必須自定義帶引數的建構函式,且該建構函式的形參列表必須為引用。
2、關於初始化列表,我們需要注意一些什麼?
* 執行順序上,初始化列表的執行要先於建構函式的函式體
* 初始化列表中的各個變數的初始化順序只與類中各個變數的宣告順序相同,和初始化列表中的變數擺放順序無關。
擴充套件新增內容:
此處新增的內容是今天在看《c++ primer》時注意到的乙個和建構函式初始化列表相關的乙個知識點,就隨手追加在這裡了。
在這段**中,雖然最終執行列印的效果是一樣的,但first的寫法的本質為:在構造t這個物件時,在建構函式的函式體執行之前,先對m_i這個成員變數進行了預設的初始化,然後在建構函式的函式體內部重新將m_i的值賦值為10,共涉及了2步;而在second中使用了初始化列表的這種寫法的本質則是:在構造t這個物件時,在建構函式的函式體執行之前,直接使用10對m_i這個成員變數進行初始化操作,一步到位。
第二十課 初始化列表的使用
學習狄泰軟體學院唐老師c 課程心得,文章內容來自於唐老師課件 問題 類中是否可以定義const成員?下面的類定義是否合法?如果合法,ci的值是什麼,儲存在 include class test int main 編譯通過 include class test int main 報錯 error un...
第二十課(一) C字串
第二十課 一 c字串 20.1 字串 在 c 語言中,字串實際上是使用 null字元 0 終止的一維字元陣列 因此,乙個以 null 結尾的字串,包含了組成字串的字元。下面的宣告和初始化建立了乙個 hello 字串。由於在陣列的末尾儲存了空字元,所以 字元陣列的大小比單詞 hello 的字元數多乙個...
第二十五課 類的靜態成員變數 狄泰軟體學院
通過物件名能夠訪問public成員變數 每個物件的成員變數都是專屬的 成員變數不能在物件之間共享 新的需求 統計在程式執行期間某個類的物件的數目 保證程式的安全性 不能使用全域性變數 隨時可以獲取當前物件的數目 include class test test int getcount test gt...