C 中初始化列表的使用

2022-08-18 10:33:14 字數 2481 閱讀 4940

1,初始化列表是在 c++ 中才引入的;

2,以「類中是否可以定義 const 成員?」這個問題來引入初始化列表:

1,const 這個關鍵字可以定義真正意義上的常量,也可以在某些情況下定義唯讀變數;

3,小實驗:

1,下面的類定義是否合法?如果合法,ci 的值是什麼,儲存在**?

1 #include 2

3class

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 2

3class

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 2

3class

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,賦值:對已經存在的物件進行值設定;

1

intmain()

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 改寫建構函式...