C++虚函数的实现方式
生活随笔
收集整理的這篇文章主要介紹了
C++虚函数的实现方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
編譯時若基類中有虛函數,編譯器為該的類創建一個一維數組的虛表,存放是每個虛函數的地址。基類和派生類都包含虛函數時,這兩個類都建立一個虛表。構造函數中進行虛表的創建和虛表指針的初始化。
在構造子類對象時,要先調用父類的構造函數,初始化父類對象的虛表指針,該虛表指針指向父類的虛表。執行子類的構造函數時,子類對象的虛表指針被初始化,指向自身的虛表。每一個類都有虛表。虛表可以繼承,如果子類沒有重寫虛函數,那么子類虛表中仍然會有該函數的地址,只不過這個地址指向的是基類的虛函數實現。
當用一個指針調用一個函數的時候,被調用的函數是取決于這個指針的類型。即如果這個指針是基類對象的指針就調用基類的方法;如果指針是派生類對象的指針就調用派生類的方法,當然如果派生類中沒有此方法,就會向上到基類里面去尋找相應的方法。這些調用在編譯階段就確定了。當涉及到多態性的時候,采用了虛函數和動態綁定,此時的調用就不會在編譯時候確定而是在運行時確定。不在單獨考慮指針/引用的類型而是看指針/引用的對象的類型來判斷函數的調用,根據對象中虛指針指向的虛表中的函數的地址來確定調用哪個函數
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的C++虚函数的实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。