我在面試求職的過程中,總是會遇見有關C++ 虛函數的一些題目。昨天從老徐那裡弄了點資料過來,在看的過程中,感覺良好,于是将我的學習過程記錄了下來,希望能夠增強我的記憶,下次遇到這樣的筆試題目的時候能夠解答。
首先面對的是什麼是虛函數?概念這些是費話,不懂的自己看書去,也可以上網搜。
簡單地說,那些被virtual關鍵字修飾的成員函數,就是虛函數。
虛函數的作用,用專業術語來解釋就是實作多态性(Polymorphism),多态性是将接口與實作進行分離;用形象的語言來解釋就是實作以共同的方法,但因個體差異而采用不同的政策。
下面來看一段簡單的代碼:

通過
和
這兩個類的的
函數,可以看出這兩個類因個體的差異而采用了不同的政策,輸出的結果也是我們預料中的,分别是
。但這是否真正做到了多态性呢?沒有,多态還有個關鍵之處就是一切用指向基類的指針或引用來操作對象。現在把代碼改一改,如下:
結果卻是兩個
。問題來了,p2明明指向的是
的對象但卻是調用的
的
函數,這不是我們所期望的結果,那麼解決這個問題就需要用到虛函數了。如下: