c++中這些作法是不正確或者應該極力避免的

  • 構造函數聲明爲虛函數:所謂虛函數就是多態狀況下只執行一個,而從繼承的概念來說,老是要先構造父類對象,而後才能是子類對象,若是構造函數設爲虛函數,那麼當你在構造父類的構造函數時就不得不顯示的調用構造,還有一個緣由就是爲了防錯,試想若是你在子類中一不當心重寫了個跟父類構造函數同樣的函數,那麼你的父類的構造函數將被覆蓋,也即不能完成父類的構造.就會出錯
  • 構造函數中調用虛函數:在構造函數不要調用虛函數。在基類構造的時候,虛函數是非虛,不會走到派生類中,既是採用的靜態綁定。顯然的是:當咱們構造一個子類的對象時,先調用基類的構造函數,構造子類中基類部分,子類尚未構造,尚未初始化,若是在基類的構造中調用虛函數,若是能夠的話就是調用一個尚未被初始化的對象,那是很危險的,因此C++中是不能夠在構造父類對象部分的時候調用子類的虛函數實現。可是不是說你不能夠那麼寫程序,你這麼寫,編譯器也不會報錯。只是你若是這麼寫的話編譯器不會給你調用子類的實現,而是仍是調用基類的實現
  • 析構函數中調用虛函數:在析構函數中也不要調用虛函數。在析構的時候會首先調用子類的析構函數,析構掉對象中的子類部分,而後在調用基類的析構函數析構基類部分,若是在基類的析構函數裏面調用虛函數,會致使其調用已經析構了的子類對象裏面的函數,這是很是危險的
相關文章
相關標籤/搜索