20 初始化列表的使用

2021-10-03 10:01:37 字數 2359 閱讀 3314

注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。

測試環境:ubuntu 10.10

gcc版本:4.4.5

一、問題

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

類中可以巨集定義const成員變數,只能通過成員列表進行初始化。

二、小實驗

1)下面的類定義是否合法?

- 如果合法,ci的值是什麼,存在在**?

class test

};

程式設計實驗

類中的const成員

20-1.cpp

#include class test

int getci()

};int main()

操作:

1)g++ 20-1.cpp -o 20-1.out編譯正確,列印結果:

t.ci = 10
2)測試:不在建構函式的初始化列表初始化const修飾的變數ci,**如下:

#include class test

int getci()

};int main()

操作:g++ 20-1.cpp -o 20-1.out編譯錯誤:

20-1.cpp:8:2 error: uninitialized member 'test::ci' with 'const' type 'const int' 

test()

20-1.cpp:10:6: error: assignment of read-only member 'test::ci'

ci = 10;

三、類成員的初始化

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

2)語法規則

class name::class name() : m1(v1), m2(v1,v2), m3(v3)    //初始化列表對成員變數進行初始化

3)注意事項

- 成員的初始化順序與成員的宣告順序相同

- 成員的初始化順序與初始化列表中的位置無關

- 初始化列表先於建構函式的函式體

程式設計試驗

初始化列表的使用

20-2.cpp

#include class value

int geti()

};class test

};int main()

操作:

1)編譯:g++ 20-2.cpp -o 20-2.out,列印結果:

i = 2

i = 3

i = 1

test::test()

分析:

列印結果證明了先執行初始化列表,在執行建構函式。成員變數宣告順序,決定了變數在初始化列表宣告順序。

四、類中的const成員

1)類中的const成員會被分配空間的(和類空間位置一致)

2)類中的const成員的本質是唯讀變數

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

編譯器無法直接得到const成員的初始值,因此無法進入符號表成為真正意義上的常量。

程式設計實驗

唯讀成員變數

20-3.cpp

#include class value

int geti()

};class test

int getci()

void setci(int v)

};int main()

操作:

1) g++ 20-3.cpp -o 20-3.out編譯正確,執行結果:

i = 2

i = 3

i = 1

test::test()

t.ci = 100

t.ci = 10

分析:

const修飾的成員變數,並不是真正意義的常量,可以通過指標進行修改。

五、小插曲

1)初始化與賦值不同

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

- 賦值:對已經存在的物件進行值設定

初始化和賦值的不同

int main()

小結

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

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

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

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

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

C 20 初始化列表的使用

問題 類中是否可以定 const 成員?下面的類定義是否合法?如果合法,ci的值是什麼,儲存在 class test include class test int getci int main 輸出 test.cpp 8 error uninitialized member test ci with...

第20課 初始化列表的使用

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

第20課 初始化列表的使用

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