在stackoverflower上發現的乙個問題,覺得挺有意思,自己之前也沒有注意到,貼出來分享一下
這裡面的內容實在討論在子類的初始化列表中,如果對子類的成員變數進行初始化,然後呼叫父類的建構函式,那麼他們的執行順序會是什麼樣的,話不多說,碼來!
#includeusing namespace std;
class parent
};class a
};class son : parent
};int main()
執行結果
parent constructor is called
3a constructor is called
2a constructor is called
son constructor is callede
分析:雖然按照常理,在初始化列表中,初始化的順序是他們被宣告的順序,但是在加入了的建構函式之後,就會先去對父類初始化,這也符合我們的認知,因為在整合體系中的呼叫順序就是這樣的,如果我們在子類的建構函式中不顯示的呼叫父類的建構函式,那麼結果並不會發生變化
類建構函式初始化列表
表現形式有三種 當前類進行初始化,尤其是當成員變數是乙個const或者乙個引用型別 class demo 需要在初始化列表中呼叫外部類成員的初始化函式 include using namespace std classc1 classc2 intmain 最後列印的結果是 class 1 const...
c 子類建構函式初始化及父類構造初始化
我們知道,構造方法是用來初始化類物件的。如果在類中沒有顯式地宣告建構函式,那麼編譯器會自動建立乙個預設的建構函式 並且這個預設的建構函式僅僅在沒有顯式地宣告建構函式的情況下才會被建立建立。1.父類沒有宣告建構函式 1 子類也沒有宣告自己的建構函式,則父類和子類均由編譯器生成預設的建構函式。2 子類中...
C 類建構函式初始化列表
建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 你可能以為上面的 將會首先做m y i,然後做m x m y,最後它們有相同的值。但是編譯器先初始化m x,然後是m y,因為它們是按這樣的順序宣告的。結果是m x將有乙個不可 的值。...