C++ 進階之二:構造和繼承

以一樣的順序定義和初始化成員變量

緣由:C++ 爲了確保銷燬成員的順序是惟一的,要求初始化成員的順序也惟一。那根據什麼順序去初始化呢,就根據成員變量在類中定義的順序。ide

在構造函數中用初始化代替賦值

緣由:若是不這麼作,會對成員變量調用默認構造函數,而後在初始化的時候,再次調用賦值操做。但這兩個步驟,能夠經過初始化中直接調用成員的賦值構造函數一步實現。函數

避免在構造函數和析構函數中調用虛擬函數

由於: 在派生對象的成員尚未被初始化的時候就調用其成員函數極可能產生意想不到的混亂。在基類的構造期間,沒有辦法說清楚到底基本是一個獨立的對象仍是其餘派生類的基類部分。指針

將基類的析構函數設置爲公共、虛擬的或者保護、非虛擬的

由於:
若是須要經過基類指針直接析構派生類對象:派生類就須要動態地繼承基類的析構函數,這就要求須要把基類的析構函數設置爲公共的、虛擬的。對象

若是不須要經過基類指針直接析構派生類對象:那基類的析構函數不須要被子類調用,於是能夠設置爲保護的、非虛擬的。繼承

相關文章
相關標籤/搜索