第20課 初始化列表的使用

2021-09-26 14:56:38 字數 2353 閱讀 9400

類中是否可以定義const成員?

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

1

class

test

27 };

1 #include 2

3class

test412

intgetci()

1316

};17

1819

intmain()

20

類中的const成員

在c中:const 修飾的變數必須在定義的時候進行初始化,不能在定義之後對其進行賦值操作,違背了const 的含義。

在c++中:建構函式內部是對成員變數進行賦值操作,而不是初始化。初始化需要初始化列表。

(1)c++ 中提供了初始化列表,可以對成員變數進行初始化

(2)語法規則:

classname::classname():m1(v1), m2(v2,v3),m3(v3) 

1

//建構函式是對變數進行賦值操作,初始化列表是進行初始化操作,兩個是不同的概念

23 #include 4

5class

test616

intgetj()

1720

intgetk()

2124

25 test() : k(10)26

31};

3233

int main(void)34

const變數的初始化(解決建構函式中不能初始化)

(3)注意事項

① 成員的初始化順序與成員的宣告順序相同,而與初始化列表中的位置無關

② 初始化列表先於建構函式的函式體執行

1 #include 2

3class

value

4

1415

intgetm_i()

1619

};20

21class

test

2231

32int

get()

3336

};37

38int main(void)39

初始化列表的使用

(1)類中的const成員會被分配空間,區域性物件會分配棧空間、動態物件會分配堆空間、全域性物件會分配靜態儲存空間(和const int i; 不同)

(2)類中的const成員的本質是唯讀變數,可以通過指標隱式的修改。編譯器無法直接得到 const 成員的初始值,因此無法進入符號表成為真正意義上的常量

(3)類中的const成員只能在初始化列表中指定初始值

1 #include 2

3class

value413

14int

geti()

1518

};19

20class

test

2132

33int

getci()

3437

38int setci(int

v)39

44};

4546

intmain()

47

const唯讀成員變數

小插曲初始化賦值不同

(1)初始化:對正在建立的物件進行初值設定

(2)賦值:對已經存在的物件進行值設定

(1)類中可以使用初始化列表對成員進行初始化

(2)初始化列表先於建構函式體執行

(3)類中可以定義const成員變數

(4)const 成員變數必須在初始化列表中指定初始值

(5)const 成員變數為唯讀變數

第20課 初始化列表的使用

類中是否可以定義const成員?下面的類定義是否合法?如果合法,ci 的值是什麼,儲存在 1 class test 27 1 include 2 3class test412 intgetci 1316 17 1819 intmain 20類中的const成員 在c中 const 修飾的變數必須在定...

C 第20課 初始化列表的使用

本文學習自 狄泰軟體學院 唐佐林老師的 c 課程 物件的初始化是指 對正在建立的物件進行初始值設定,物件的初始化是通過建構函式實現的,建構函式中可以完成目標物件的初始狀態的設定,包括物件的成員變數的設定等等。但是通過建構函式設定的成員變數不是初始化,而是賦值,是對已經存在的變數進行賦值,並非我們所說...

20 初始化列表的使用

注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 4.4.5 一 問題 類中是否可以定義const成員?類中可以巨集定義const成員變數,只能通過成員列表進行初始化。二 小實驗 1 下面的類定義是否合法?如果合法,ci的值是什麼,存在在...