類和物件(8) 建構函式初始化列表

2022-08-12 10:48:12 字數 3702 閱讀 5309

如果我們有乙個類成員,它本身是乙個類或者是乙個結構,而且這個成員它只有乙個帶引數的建構函式,沒有預設建構函式,這時要對這個類成員進行初始化,就必須呼叫這個類成員的帶引數的建構函式,如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。

建構函式中呼叫建構函式很危險。

class

a

void

printa()

~a()

private

:

intm_a;

};class

b

void

printb()

~b()

private

:

intm_b;

a m_a;

};

當類成員中含有乙個const物件時,或者是乙個引用時,他們也必須要通過成員初始化列表進行初始化,因為這兩種物件要在宣告後馬上初始化,而在建構函式中,做的是對他們的賦值,這樣是不被允許的。

初始化列表中的初始化順序,與宣告順序有關,與前後賦值順序無關。

#define _crt_secure_no_warnings#include 

using

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()...10

a()...

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#include 

using

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()...10

a()...20

b(int,int,int

)...

b=30

a=10

a=20

~b()...

~a()...

~a()...

#define _crt_secure_no_warnings#include 

using

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()...20

a()...10

b(int,int,int

)...

b=30

a=10

a=20

~b()...

~a()...

~a()...

#define _crt_secure_no_warnings#include 

using

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()...10

a()...20

b(int,int,int

)...

b=30

a=10

a=20

~b()...

~a()...

~a()...

#define _crt_secure_no_warnings#include 

using

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