2012年C++專家進階之三
方法:反證法
如果派生類或者說子類,寫成和基類、父類一模一樣的函數,也就是函數說,名稱相同,而且參數也相同。
注意:基類是虛函數,是帶關鍵字virtual的。
滿足覆寫的條件:
1.分屬于不同類,子類與基類;
2.基類的函數帶virtual關鍵字;
3.函數名稱相同;
4.參數也相同;
根據構造函數實作,總是先構造基類對象,但是又根據《2012年C++專家進階之二》,子類的構造函數又将覆寫基類的構造函數,将造成無法構造基類對象,進而出錯。沖突!
理論:虛函數是通過通路一張虛函數表(Virtual
Table,簡稱VTable)來實作的。VTable存儲的是對象執行個體的記憶體空間資訊,也就是各個虛函數的位址資訊。
既然構造函數是虛函數,那麼就需要通路VTable表,可是對象都還沒有執行個體化,記憶體空間都還沒有申請配置設定呢,記憶體空間都還沒有,又去哪兒找VTable表?沖突!
也就是說VTable虛函數表是在構造函數調用之後,才生成的。