我們來看下面一段**:
classb1
};class
b2
};class
b3
};class c: public b2, public b1, public
b3
private
: b1 memberb1;
b2 memberb2;
b3 memberb3;
};void
main( )
執行後的結果如下:
constructing b2 2
constructing b1 1
constructing b3 *
constructing b1 3
constructing b2 4
constructing b3 *
為什麼會有以上的結果?
眾所周知建構函式的執行次序如下:
呼叫基類建構函式,呼叫順序按照他們的繼承時宣告的順序。
呼叫內嵌成員物件的建構函式,呼叫順序按照他們在類中宣告的順序。
派生類的建構函式體中的內容。
析構函式的呼叫順序相反。
那麼再來看以上的例子就很容易理解了。b2、b1、b3是c的基類,按照上述的順序,我們先要構造基類,然後才是子物件,最後是其本身的建構函式所以先要執行這三個類的建構函式。在構造時按照他們在類中的順序,首先呼叫b2的建構函式
b2(int j)
~a()
};class
b ~b()
};class c:public
a,b ~c()
};void
main()
輸出結果:
c=b類a建構函式被呼叫
i=10
類b建構函式被呼叫
k=15
類c建構函式被呼叫
類c析構函式被呼叫
類b析構函式被呼叫
類a析構函式被呼叫
C 派生類物件構造順序
構造依如下順序 1.呼叫本類的基類的建構函式 1.1 按照基類成員定義順序對每個成員執行初始化 1.2 執行基類建構函式體 2.呼叫本類的建構函式 2.1 按照本類成員定義順序引用初始化列表對每個成員執行初始化 2.2 執行本類建構函式體 總結為一句 首先初始化本類的基類部分,然後按照宣告的順序依次...
C 派生類建構函式
派生類構造函式呼叫順序 1.基類的建構函式.2.子物件類的建構函式.3.派生類建構函式.當物件被刪除時,派生類的析構函式被執行,由於析構函式也不能被繼承,因此在執行派生類的析構函式時,基類的析構函式也會被呼叫。先執行派生類的析構函式,再執行子物件類的析構函式,再執行基類的建構函式。include u...
c ,派生類無法呼叫基類建構函式
include include using namespace std class undergraduate void showinfo private char id 10 char name 10 char major 10 class graduate public undergraduat...