一、
1)物件初始化列表出現原因
1.必須這樣做:
如果我們有乙個類成員,它本身是乙個類或者是乙個結構,而且這個成員它只有乙個帶引數的建構函式,沒有預設建構函式。這時要對這個類成員進行初始化,就必須呼叫這個類成員的帶引數的建構函式,
如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。
2、類成員中若有const修飾,必須在物件初始化的時候,給const int m 賦值
當類成員中含有乙個const物件時,或者是乙個引用時,他們也必須要通過成員初始化列表進行初始化,
因為這兩種物件要在宣告後馬上初始化,而在建構函式中,做的是對他們的賦值,這樣是不被允許的。
2)c++中提供初始化列表對成員變數進行初始化
語法規則
constructor::contructor() : m1(v1), m2(v1,v2), m3(v3)
3)注意概念
初始化:被初始化的物件正在建立
賦值:被賦值的物件已經存在
初始化列表先於建構函式的函式體執行
#include
using
namespace
std;
class a
~a()
private:
int m_a;
};class b
// 析構的順序和構造的順序正好相反
~b()
private:
int m_a;
int m_b;
const
int m_c; // 如果成員變數是const 或者 是引用的,必須要在初始化列表中進行初始化
//a m_a1;
a m_a2;
a m_a1;
};int main()
return
0;}
二、
1)當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同;之後呼叫自身類的建構函式
2)析構函式的呼叫順序與對應的構造函式呼叫順序相反
C 初始化列表學習
何謂初始化列表 與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。在c 中,struct和class的唯一區別是預設的克訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的 都以struct來演示。複製 如下 str...
c 初始化列表
與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的兩個執行階段 從概念上來講,建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段 初始化階段 所有...
C 初始化列表
與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。在c 中,struct和class的唯一區別是預設的克訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的 都以struct來演示。struct foo 初始化列表 ...