內容引自《C++ Prime》中文版P497,原著P589:函數
構造派生類對象時首先運行基類構造函數初始化對象的基類部分。在執行基類構造函數是,對象的派生類部分是未初始化的。實際上,此時對象還不是一個派生類對象。spa
撤銷派生類對象時,首先撤銷它的派生類部分,而後按照與構造順序的逆序撤銷它的基類部分。對象
在這兩種狀況下,運行構造函數或析構函數的時候,對象都是不完整的。爲了適應這種不完整,編譯器將對象的類型視爲在構造或析構期間發生了變化。在基類構造函數或析構函數中,將派生類對象看成基類類型對象對待。編譯器
若是在構造函數和析構函數中調用虛函數,則運行的是爲構造函數或析構函數自身類型定義的版本。編譯