物件初始化列表出現原因
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 執行結果 祖...