C++最重要的特性就是多態,而多態,就主要通過虛函數實現的。具體的實現過程是:
基類中的函數定義爲虛函數,派生類發生覆蓋(即函數名稱、參數列表、返回值類型完全相同)的情況下,派生類中的函數也會自動變成虛函數,不論加不加virtual關鍵字。此時,基類與子類對象中都會存在一張虛函數表(因爲含有虛函數),具體虛函數表的結構可以參照這篇文章:http://blog.csdn.net/haoel/article/details/1948051/。如果使用基類指針訪問函數時,會根據指針實際指向的對象的類型來調用基類或子類的函數,這裏就是一種“動態”性,是在程序運行中動態的判斷的。
而關於純虛函數,首先純虛函數具體定義格式如下:
virtual <類型><函數名>(<參數列表>)=0;
因爲在很多情況下,基類中不能對虛函數給出有意的實現,或者,基類本身不是實體,僅僅是一種範疇或概念,比如,動物,動物又分爲老虎、熊貓等等,動物本身不能實例化,所以可以通過純虛函數定義,將它在派生類中進行實現,並且在各個派生類中可以有不同的實現,非常靈活。
此外,含有純虛函數的類成爲抽象類,由於純虛函數沒有具體的實現,因此抽象類不能實例化。
參考文章:
C++虛函數表解析:http://blog.csdn.net/haoel/article/details/1948051/
什麼是虛函數、虛函數作用及使用方法:http://c.biancheng.net/cpp/biancheng/view/244.html