1,初始化列表是在 c++ 中才引入的;
2,以「類中是否可以定義 const 成員?」這個問題來引入初始化列表:
1,const 這個關鍵字可以定義真正意義上的常量,也可以在某些情況下定義唯讀變數;
3,小實驗:
1,下面的類定義是否合法?如果合法,ci 的值是什麼,儲存在**?
1 #include 23class
test413
*/14
15/*
由上面的語句改換如下
*/16 test() : ci(10) //
ci 在初始化之後可以改變,因為 ci 在這裡只是乙個唯讀的成員變數,僅僅是不能出現在賦值符號左邊而已;我們依舊可以通過指標的方式來修改 ci 裡面的值;
1720
21int
getci()
2225
};26
27int
main()
28
4,c++ 中提供了初始化列表對成員變數進行初始化,其語法規則為:
1,**示例:
1 classname::classname() : m1(v1), m2(v1, v2), m3(v3) //用 v1, (v1, v2), v3 分別對 m1, m2, m3 初始化;
2
1,初始化列表應該在建構函式的地方使用;
2,構造函式引數列表之後函式體之前定義初始化列表;
3,其作用就是對成員變數進行初始化;
2,注意事項(避免 bug 很重要):
1,成員的初始化順序與成員的宣告順序相同;
2,成員的初始化順序與初始化列表中的位置無關;
3,初始化列表先於建構函式的函式體執行;
1,當建構函式的函式體開始執行的時候,物件已經建立完畢了,執行建構函式的函式體僅僅是為了初始化我們這個物件的狀態而已;
2,所以說初始化列表既然是用於初始化,那麼必須在我們這個類物件建立的同時來進行執行,而不應該是物件已經建立好了才來進行一系列的初始化工作,這一點是有明確差異的,這個差異也就是初始化和賦值之間的差異;
5,初始化列表的使用程式設計實驗:
1 #include 23class
value416
17int
geti()
1821
};22
23class
test
2441
*/42 test() : m1(1), m2(2), m3(3) //
成員變數的初始化必須通過初始化列表來完成;
4346
};47
48int
main()
49
6,類中的 const 成員:
1,類中的 const 成員會被分配空間的;
1,const 成員分配的空間和我們整個類物件分配的空間一致;
2,類中的 const 成員的本質是唯讀變數;
1,根據編譯提供的錯誤 bug 資訊而得來;
3,類中的 oonst 成員只能在初始化列表中指定初始值;
1,編譯器無法直接得到 const 成員的初始值,因此無法進入符號表成為真正意義上的常量;
1,因為只能在執行時才來定義物件,呼叫建構函式,繼而來呼叫初始化列表初始化成員變數;
7,唯讀成員變數程式設計實驗:
1,**示例:
1 #include 23class
value413
intgeti()
1417
};18
19class
test
2033
34int
getci()
3538
39int setci(int
v)40
45};
4647
48int
main()
49
2,這個實驗說明:
1,類中的 const 成員不是真正意義上的常量,它只是唯讀變數(編譯器告訴的);
8,小插曲:
1,初始化與賦值不同:
1,初始化:對正在建立的物件進行初始值設定;
1,初始化的時候,物件還沒建立好,在建立的同時,我們將它的值確定了;
2,賦值:對已經存在的物件進行值設定;
1intmain()
2
9,小結:
1,類中可以使用初始化列表對成員進行初始化;
1,類中不能直接初始化成員變數(不論變數為一般的還是類的物件),只能通過初始化列表來初始化;
2,初始化列表先於建構函式體執行;
3,類中可以定義 const 成員變數(這裡是變數);
1,const 作用於類的成員後得到的僅是唯讀變數;
4,const 成員變數必須在初始化列表中指定初始值;
5,const 成員變數為唯讀變數;
c 使用初始化列表來初始化字段
includeusing namespace std class student1 student1 int i b i a b 異常順序 發現a的值為0 b的值為2 說明初始化僅僅對b有效果,對a沒有起到初始化作用 student1 int a,int b a a b b 正常順序 發現a b 2...
C 中成員初始化列表的使用
c 在類的建構函式中,可以兩種方式初始化成員資料 data member 1,在建構函式的實現中,初始類的成員資料。諸如 class point int getx int gety 2,還可以定義初始化成員列表 initializer list 來初始化成員資料 data member 改寫建構函式...
C 中成員初始化列表的使用
c 在類的建構函式中,可以兩種方式初始化成員資料 data member 1,在建構函式的實現中,初始類的成員資料。諸如 class point int getx int gety 2,還可以定義初始化成員列表 initializer list 來初始化成員資料 data member 改寫建構函式...