多態(tài)與虛函數(shù)

多態(tài)與虛函數(shù)

注意

  1. 在成員函數(shù)(靜態(tài)成員、構(gòu)造函數(shù)和析構(gòu)函數(shù)除外)中調(diào)用同類的虛函數(shù)的語句是多態(tài)的。

  2. 在構(gòu)造函數(shù)和析構(gòu)函數(shù)中調(diào)用虛函數(shù)不是多態(tài)的,編譯時即可以確定調(diào)用的是哪個函數(shù)。

  3. 編譯器看到是哪個類的指針,那么就會認(rèn)為通過它訪問的,就應(yīng)該是哪個類的成員,編譯器不會分析基類指針到底指向的是基類對象還是派生類對象。

  4. 區(qū)分多態(tài)和非多態(tài)的情況:

    1. 通過基類指針或引用調(diào)用成員函數(shù)的語句,只有當(dāng)該成員函數(shù)是虛函數(shù)時才會是多態(tài)。如果該成員函數(shù)不是虛函數(shù),那么這條函數(shù)調(diào)用語句就是靜態(tài)聯(lián)編的,編譯時就能確定調(diào)用的是那個類的成員函數(shù)。
    2. 另外,C++語言規(guī)定,只要在基類中某個函數(shù)被聲明為虛函數(shù),那么,在派生類中,同名同參數(shù)表的成員函數(shù)即使前面不寫 virtual 關(guān)鍵字,也自動成為虛函數(shù).

總結(jié)

  1. 通過基類的指針,調(diào)用基類和派生類中都有的同名虛函數(shù)時,基類指針指向的是基類對象,執(zhí)行的就是基類的虛函數(shù),基類指針如果指向派生類對象,執(zhí)行的就是派生類的虛函數(shù),這就稱為多態(tài)。多態(tài)也適用于通過基類引用調(diào)用基類和派生類中都有的同名虛函數(shù)的情況。

  2. 多態(tài)是通過虛函數(shù)表來實現(xiàn)的。

  3. 在普通成員數(shù)中調(diào)用虛函數(shù)是多態(tài)的,但在構(gòu)造函數(shù)和析構(gòu)函數(shù)中調(diào)用虛函數(shù)不是多態(tài)的。

  4. 有虛函數(shù)的類,其析構(gòu)函數(shù)也應(yīng)該實現(xiàn)為虛函數(shù)

  5. 包含純虛函數(shù)的類稱為抽象類。不能用抽象類定義對象。抽象類的派生類,僅當(dāng)實現(xiàn)了所有的純虛函數(shù),才會變成非抽象類。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是接口? 接口是行為的抽象,接口的目的主要為不同的類提供通用的處理服務(wù),從而實現(xiàn)系統(tǒng)的可維護(hù)性與可擴(kuò)展性。 虛...
    wuzhiguo閱讀 516評論 0 0
  • 多態(tài)(1)靜態(tài)多態(tài)與動態(tài)多態(tài) 什么是多態(tài) 從字面上理解就是多種形態(tài)的意思。而多態(tài)一詞最初源自希臘語,其含義便是“多...
    kingZXY2009閱讀 2,469評論 0 2
  • C++虛函數(shù) C++虛函數(shù)是多態(tài)性實現(xiàn)的重要方式,當(dāng)某個虛函數(shù)通過指針或者引用調(diào)用時,編譯器產(chǎn)生的代碼直到運行時才...
    小白將閱讀 1,810評論 4 19
  • 一生太長,要和有趣的人在一起,而有趣的最基本前提,就是談得來。愛情大多萌發(fā)于“談得來”,從一句你好,到你愛看...
    狗子哥哥閱讀 681評論 0 2
  • 則魚閱讀 130評論 0 0

友情鏈接更多精彩內(nèi)容