緣由:C++ 爲了確保銷燬成員的順序是惟一的,要求初始化成員的順序也惟一。那根據什麼順序去初始化呢,就根據成員變量在類中定義的順序。ide
緣由:若是不這麼作,會對成員變量調用默認構造函數,而後在初始化的時候,再次調用賦值操做。但這兩個步驟,能夠經過初始化中直接調用成員的賦值構造函數一步實現。函數
由於: 在派生對象的成員尚未被初始化的時候就調用其成員函數極可能產生意想不到的混亂。在基類的構造期間,沒有辦法說清楚到底基本是一個獨立的對象仍是其餘派生類的基類部分。指針
由於:
若是須要經過基類指針直接析構派生類對象:派生類就須要動態地繼承基類的析構函數,這就要求須要把基類的析構函數設置爲公共的、虛擬的。對象
若是不須要經過基類指針直接析構派生類對象:那基類的析構函數不須要被子類調用,於是能夠設置爲保護的、非虛擬的。繼承