int a =10;
char b =
'r';
inta(
10);charb(
'r')
;
但是括號賦值只能在變數定義並初始化中,不能用在變數定義之後再賦值。
有的資料成員需要在建構函式調入之後、函式體執行之前,就進行初始化,比如引用資料成員、常量資料成員、物件資料成員。
冒號初始化是在給資料成員分配記憶體空間時、進入函式體之前就進行初始化,也就是說,初始化這個資料成員時函式體還未執行。
對於在函式體內的初始化,是在所有的資料成員被分配好記憶體空間後才進行的。
對比如下兩段**:
// **一
class
student
;student::
student
(int i,
int j)
// **二
class
student
;student::
student
(int i,
int j):a
(i),
b(j)
在student類中有兩個資料成員,乙個是常量資料成員,乙個是引用資料成員。
**一中在建構函式中初始化了這兩個資料成員,但是這並不能通過編譯,因為(1)常量初始化時必須賦值,而且它的值是不能再改變的;(2)引用在初始化時也是需要賦值的,定義了引用之後,它就和引用的目標維繫在了一起,也是不能再被賦值的。而上述**會提示(1)變數a和b沒有被初始化;(2)變數a是唯讀變數,不可以再進行分配。
**二中使用了冒號初始化的機制,使得在建構函式中使用常量和引用資料成員變為可能。
建構函式後加冒號是初始化表示式:
有四種情況下應該使用初始化表示式來初始化成員:
1:初始化const成員
2:初始化引用成員
3:當呼叫基類的建構函式,而它擁有一組引數時
4:當呼叫成員類的建構函式,而它擁有一組引數時。
再舉個例子:
#include
classa}
;classb1:
public a
};
請問那句後面的 :a(b) 代表什麼啊,為什麼要跟個b1基類的建構函式?
答:a(b)實際上是做的是用b初始化a的成員x;既x=b; :是初始化列表方式
C 類成員函式後面加const
如果類的成員函式後面加了const關鍵字,說明這個函式是不能改變類中的成員變數的。如果在編寫該函式會修改類中的成員變數,編譯時會出錯,並且也提高了程式的可讀性,當我們看到函式後面有const的話就知道這個函式是不會修改類中資料的。注意 1 只能加在非靜態成員函式後面,加在靜態成員函式和普通函式後面會...
C C 定義變數後面加冒號,數字的含義
該種形式出現於結構體或共用體的定義中,是位域定義的標準形式。其使用方式為 struct dummystructname dummystructname 含義為,在結構體dummystructname彙總,成員變數clonegroupid 占用空間為 n 位。n為正整數,其值必須小於type型別占用的...
C 建構函式後面的冒號的作用
其實冒號後的內容是初始化成員列表,一般有三種情況 1 對含有物件成員的物件進行初始化,例如,類line有兩個私有物件成員startpoint endpoint,line的建構函式寫成 line int sx,int sy,int ex,int ey startpoint sx,sy endpoint...