類中是否可以定義const成員?
下面的類定義是否合法?如果合法,ci 的值是什麼,儲存在**?
1class
test
27 };
1 #include 2類中的const成員3class
test412
intgetci()
1316
};17
1819
intmain()
20
在c中:const 修飾的變數必須在定義的時候進行初始化,不能在定義之後對其進行賦值操作,違背了const 的含義。
在c++中:建構函式內部是對成員變數進行賦值操作,而不是初始化。初始化需要初始化列表。
(1)c++ 中提供了初始化列表,可以對成員變數進行初始化
(2)語法規則:
classname::classname():m1(v1), m2(v2,v3),m3(v3)
1const變數的初始化(解決建構函式中不能初始化)//建構函式是對變數進行賦值操作,初始化列表是進行初始化操作,兩個是不同的概念
23 #include 4
5class
test616
intgetj()
1720
intgetk()
2124
25 test() : k(10)26
31};
3233
int main(void)34
(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 2const唯讀成員變數3class
value413
14int
geti()
1518
};19
20class
test
2132
33int
getci()
3437
38int setci(int
v)39
44};
4546
intmain()
47
【小插曲】初始化與賦值不同
(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的值是什麼,存在在...