建構函式的初始化列表

2021-09-02 14:07:21 字數 1763 閱讀 3012

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。

例如:

#includeclass test

void show()

private:

int ma;

int mb;

int mc;

};int main()

結果為:

從結果中,我們可以看出,初始化的順序和初始化列表的順序無關,僅僅和宣告有關。

需要初始化的資料成員是物件的情況:

1.資料成員是物件,並且這個物件只有含引數的建構函式,沒有無引數的建構函式;

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

#includeclass date

public:

int year;

int month;

int day;

};class stu

void show()

//初始化};或

class test

//初始化

}

不屬於物件獨享,屬於物件共享,在類外要初始化,不依賴物件的訪問

#includeclass test

void show()

public:

static int ma;//修飾靜態成員變數

int mb;

};int test::ma = 100;//在類外初始化

int main()

如果static修飾成員方法,則是 _cdel呼叫約定,沒有this指標;

不能訪問普通成員變數,只能訪問靜態成員變數和全域性變數;

靜態成員方法不能呼叫普通成員方法,但是普通成員方法可以呼叫靜態的成員方法。

#includeint gdata = 10;//全域性變數

class test

static void show()//_cdecl呼叫約定,沒有this指標

void print()//thiscall this test* const this

public:

static int ma;

int mb;

};int test::ma = 100;

int main()

1.常物件不能呼叫普通方法

2.常物件能呼叫常方法

3.普通物件可以呼叫常方法

4.普通函式可以呼叫常方法

5.常函式不能呼叫普通方法

6.常成員變數,一定要初始化(建構函式的初始化列表中);

#includeclass test

//void show()//錯誤,常物件不能呼叫普通方法

void show() const// test* const this const

void print()// test* const this

private:

int ma;

int mb;

};int main()

建構函式初始化列表

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval 是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exa...

建構函式初始化列表

c 程式語言中有很多比較重要的概念值得我們去深入 比如今天為大家介紹的有關c 建構函式的相關概念。這一方面的知識在實際程式設計中就是乙個比較重要的應用技術。希望能個大家可以從中學到一些知識。c 建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化...

建構函式初始化列表

class object private int v1,v2 看看願意是 先初始化v2為5,然後初始化v1為 3 倍的 v2 但是結果卻是奇葩的,這個是因為建構函式的初始化列表遵循的原則是先初始化父類 父類也是這個原則,那麼就相當於遞迴 然後初始化本類的成員,最後執行建構函式的函式體 而初始化本類的...