C++學習筆記之多態與虛函數,虛函數表


封裝,繼承和多態是C++語言的三大特性。而虛函數的作用就是實現多態性,多態性又包含編譯時的多態和運行時的多態兩大類,即靜態多態性和動態多態性。
靜態多態性是指定義在一個類或一個函數中的同名函數,根據參數表區別語義,並通過靜態聯編來實現,靜態聯編在編譯時就已經確定好了。
動態多態性:
當程序發現虛函數名前的關鍵字virtual后,會自動將其作為動態聯編處理,即在程序運行時動態的選擇合適的成員函數。
定義虛函數的限制:

  • 非類的成員函數不能定義為虛函數,類的靜態成員函數和構造函數不能定義為虛函數,但析構函數可以定義為虛函數。當將積累的析構函數定義為虛函數后,當利用delete刪除一個窒息那個派生類定義的對象指針時,系統會調用相應類的析構函數,而不這樣做的話,只調用基類的析構函數。

  • 只需要在聲明函數的類體在聲明函數的類體中使用關鍵字“virtual”將函數聲明為虛函數,而定義函數時不需要使用關鍵字“virtual”。

  • 當將基類中的某一成員函數聲明為虛函數后,派生類中的同名函數自動成為虛函數。
    虛函數表:
    虛函數是通過一張虛函數表來實現的。這張表解決了集成、覆蓋的問題,保證其放映實際的函數,編譯器必須保證虛函數表的指針存在於對實例中最前面的位置(為了保證正確取到虛函數的偏移量)。這就是說我們通過對象實例的地址得到這張虛函數表,然后就可以遍歷其中的函數指針,並調用相應的函數。
    未完待續==

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com