類和物件 3 物件初始化列表

2021-09-27 04:28:27 字數 1279 閱讀 2738

物件初始化列表出現原因

1.必須這樣做:

如果我們有乙個類成員,它本身是乙個類或者是乙個結構,而且這個成員它只有乙個帶引數的建構函式,沒有預設建構函式。這時要對這個類成員進行初始化,就必須呼叫這個類成員的帶引數的建構函式,

如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。

2、類成員中若有const修飾,必須在物件初始化的時候,給const int m 賦值

當類成員中含有乙個const物件時,或者是乙個引用時,他們也必須要通過成員初始化列表進行初始化,

因為這兩種物件要在宣告後馬上初始化,而在建構函式中,做的是對他們的賦值,這樣是不被允許的。2)

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

語法規則

constructor::contructor() : m1(v1), m2(v1,v2), m3(v3)

#include using namespace std;

class a

~a()

protected:

private:

int a;

};//1 建構函式的初始化列表 解決: 在b類中 組合了乙個 a類物件 (a類設計了建構函式)

//根據建構函式的呼叫規則 設計a的建構函式, 必須要用;沒有機會初始化a

//新的語法 constructor::contructor() : m1(v1), m2(v1,v2), m3(v3)

class b

b(int _b1, int _b2, int m, int n) : a1(m), a2(n), c(0)

~b()

protected:

private:

int b1;

int b2;

a a2;

a a1;

const int c;

};//2 先執行 被組合物件的建構函式

//如果組合物件有多個,按照定義順序, 而不是按照初始化列表的順序

//析構函式 : 和建構函式的呼叫順序相反

//3 被組合物件的構造順序 與定義順序有關係 ,與初始化列表的順序沒有關係.

//4 初始化列表 用來 給const 屬性賦值

void obj10play()

void main()

建構函式和析構函式的執行順序如下:

1、先執行 被組合物件的建構函式 

2、如果組合物件有多個,按照定義順序, 而不是按照初始化列表的順序

3、析構函式 : 和建構函式的呼叫順序相反

8 物件初始化

1.分配物件 分配 allcoation 是乙個新物件誕生的過程。向某個類傳送alloc訊息,就能為類分配一塊足夠大的記憶體,以存放該類的全部例項變數。同時alloc方法還順便將這塊記憶體區域全部初始化為0。objective c將分配和初始化拆分為兩個明確的步驟 來自nsobject的類方法all...

20140111 物件初始化過程

c 物件初始化 1.先變數後建構函式。變數先被初始化,然後建構函式被執行 2.先靜態化後例項化。當乙個類被訪問時,靜態變數和建構函式最先被初始化.接著是物件的例項化變數和建構函式被初始化 3.先派生類後基類。對於變數和靜態建構函式,派生物件在基物件之前被初始化.比如c類派生自b類,b類派生自a類,那...

My Java之筆記(3) 物件初始化順序

class bird public bird class raptor extends bird public raptor static class hawk extends raptor public hawk public static void main string args 執行結果 祖...