學習c 3 初始化列表

2021-08-21 17:53:11 字數 1113 閱讀 5206

一、

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 初始化列表 ...