#include
using namespace std;
class base
base( int i):m_i(m_j),m_j(i){}
int get_i()
int get_j()
};int main()
結果:偽隨機數,98
建構函式初始化列表僅指定用於初始化成員的值,並不指定這些初始化執行的順序,成員初始化的次序就是定義成員的次序,第乙個成員首先被初始化,然後是第二個。
上面的例子,private:
int m_i;
int m_j;
成員定義的順序是 m_i,m_j,那麼初始化也是先初始化m_i,然後是m_j.
base obj(98);base( int i):m_i(m_j),m_j(i){} 先初始化m_i=98,然後再初始化m_i(m_j),由於m_j是個隨機值,則m_i的值會更改為m_j,然後再m_j(i)使得m_j=98
在看下面的例子:
private:
int m_j;
int m_i;
輸出結果:98,98
這就是定義成員列表的次序和初始化的次序不一樣的結果。
c 建構函式初始化列表中成員初始化的次序性
上 include using namespace std class a void print val private inti intj int main int argc char ar 結果 究其因 類中成員變數的宣告次序為先i後j,在初始化列表中初始化時,先j後i。但是程式執行時,初始化列...
c 中類的資料成員初始化次序
今天學了乙個知識點,感覺還挺重要的,就是當乙個類中的某個資料成員同時擁有就地初始化 建構函式初始化列表和建構函式函式體裡的賦值,那麼它會先執行哪個?最後生效的又是哪個呢?根據老師的講解,資料成員的初始化次序依次為 就地初始化 建構函式的初始化列表 建構函式裡的賦值 嚴格意義上不能成為初始化 而當三種...
成員初始化列表
類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。2.進入建構函式後在建構函式中執行一般計算 計算階段由建...