c 成員函式後面加乙個冒號的含義

2021-10-01 09:43:20 字數 1249 閱讀 5187

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...