如果我們有乙個類成員,它本身是乙個類或者是乙個結構,而且這個成員它只有乙個帶引數的建構函式,沒有預設建構函式,這時要對這個類成員進行初始化,就必須呼叫這個類成員的帶引數的建構函式,如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。
建構函式中呼叫建構函式很危險。
classa
void
printa()
~a()
private
:
intm_a;
};class
b
void
printb()
~b()
private
:
intm_b;
a m_a;
};
當類成員中含有乙個const物件時,或者是乙個引用時,他們也必須要通過成員初始化列表進行初始化,因為這兩種物件要在宣告後馬上初始化,而在建構函式中,做的是對他們的賦值,這樣是不被允許的。
初始化列表中的初始化順序,與宣告順序有關,與前後賦值順序無關。
#define _crt_secure_no_warnings#includeusing
namespace
std;
class
a
void
printa()
~a()
private
:
intm_a;
};class
b b(
int a1, int a2, int
b) :m_a1(a1), m_a2(a2)
void
printb()
~b()
private
:
intm_b;
a m_a1;
a m_a2;
};void
test1()
void test(int a1,int a2,int
bb)int main(void
)
螢幕輸出結果:
a()...10a()...
20b(a&,a&,int
)...
b=30
a=10
a=20
~b()...
~a()...
~a()...
~a()...
~a()...
-----------------a()...
10a()...
20b(
int,int,int
)...
b=30
a=10
a=20
~b()...
~a()...
~a()...
#define _crt_secure_no_warnings#includeusing
namespace
std;
class
a
void
printa()
~a()
private
:
intm_a;
};class
b
void
printb()
~b()
private
:
intm_b;
a m_a1;
a m_a2;
};void test(int a1,int a2,int
bb)int main(void
)
螢幕輸出結果:
a()...10a()...20
b(int,int,int
)...
b=30
a=10
a=20
~b()...
~a()...
~a()...
#define _crt_secure_no_warnings#includeusing
namespace
std;
class
a
void
printa()
~a()
private
:
intm_a;
};class
b
void
printb()
~b()
private
:
intm_b;
a m_a2;
a m_a1;
};void test(int a1,int a2,int
bb)int main(void
)
螢幕輸出結果:
a()...20a()...10
b(int,int,int
)...
b=30
a=10
a=20
~b()...
~a()...
~a()...
#define _crt_secure_no_warnings#includeusing
namespace
std;
class
a
void
printa()
~a()
private
:
intm_a;
};class
b
void
printb()
~b()
private
:
intm_b;
a m_a1;
a m_a2;
};void test(int a1,int a2,int
bb)int main(void
)
螢幕輸出結果:
a()...10a()...20
b(int,int,int
)...
b=30
a=10
a=20
~b()...
~a()...
~a()...
#define _crt_secure_no_warnings#includeusing
namespace
std;
class
abc ~abc()
private
:
intm_a;
intm_b;
intm_c;
};class
abcd
abcd(abc&abc, int
d) :m_abc(abc), m_d(d)
~abcd()
private
:
intm_d;
abc m_abc;
};class
am ~am()
private
:
intm_a;
const
intm_m;
};int main(void
)
C 類 物件 建構函式 初始化列表
面向過程程式設計 關注是問題解決的過程步驟 事情是如何解決的 演算法。物件導向程式設計 關注的是誰能解決問題 類 需要什麼樣的資料 成員變數 具備什麼樣的技能 成員函式 才能解決問題。抽象 找出乙個能夠解決問題的 物件 觀察研究物件 找出解決所必須的資料 屬性 功能 成員函式 封裝 把抽象的結構,歸...
類建構函式初始化列表
表現形式有三種 當前類進行初始化,尤其是當成員變數是乙個const或者乙個引用型別 class demo 需要在初始化列表中呼叫外部類成員的初始化函式 include using namespace std classc1 classc2 intmain 最後列印的結果是 class 1 const...
建構函式初始化列表和初始化函式
其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...