建構函式初始化列表初始化成員變數的順序

2021-10-19 11:00:33 字數 1119 閱讀 5839

#include

#include

#include

using

namespace std;

class

point

~point()

point

(point &p)

intgetx()

intgety()

};intmain()

執行結果如下:

可以看到m_x、m_y按照我們預想的結果進行了初始化,輸出結果符合預期。

接下來我們將私有變數m_x、m_y的宣告順序調換一下,看看結果會是怎樣。

#include

#include

#include

using

namespace std;

class

point

~point()

point

(point &p)

intgetx()

intgety()

};intmain()

執行結果如下:

可以看到,m_y的值並不是2,這就是因為初始化順序的問題,導致了m_y的值並不和我們預想的結果一樣。

類的成員變數在使用初始化列表進行初始化時,成員變數的初始化順序與建構函式中初始化成員列表的順序無關,只與定義成員變數的順序有關

從test1中可以看到,我們先宣告了變數m_x,後宣告了變數m_y,所以通過初始化列表進行初始化時會先初始化m_x,後初始化m_y,這樣就符合我們的預期(即先有m_x = 1; 後執行m_y = m_x + 1; 於是有m_x = 1; m_y = 2)。

而對於test2而言,由於我們先宣告的m_y,後宣告的m_x,所以會先初始化m_y,後初始化m_x(即先有m_y = m_x + 1; 後執行m_x = 1; 於是有m_x = 1; m_y的值不定)。

C 建構函式初始化成員列表

1.只能在建構函式初始化列表初始化的成員變數的型別?a.const成員變數 b.引用型別的成員變數 c.static不能在初始化列表中進行初始化 d.類成員變數中有自定義型別的變數最好在初始化列表中進行初始化 2.初始化列表的順序?初始化列表的初始化順序是依據類成員變數定義的順序來決定的。3.關於s...

C 類建構函式初始化列表及初始化成員變數的誤區

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 cpp view plain copy class cexample 建構函式內部賦值 cexample 上面的例子中兩個建構函式的結果是一樣的。上面的建構函式 使用初始化列表的建構函...

C 初始化成員列表

c 在類的建構函式中,可以兩種方式初始化成員資料 data member 1,在建構函式的實現中,初始類的成員資料。諸如 class point int getx int gety 2,還可以定義初始化成員列表 initializer list 來初始化成員資料 data member 改寫建構函式...