程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 虛函數表

虛函數表

編輯:關於C語言

虛函數表完成了C++編譯器對於虛函數的實現方式,即dynamic binding,為了達到動態綁定(後期綁定)的目的,C++編譯器通過某個表格,再執行期“間接”調用實際上欲綁定的函數。這樣的表格成為虛函數表vtable)
          每一個“內含虛函數的類”,編譯器都會為它做出一個虛函數表,表中的每一個元素都指向一個虛函數的地址。

        此外,編譯器也會為類加上一項成員變量,是一個指向該虛函數的指針(vptr),每一個包含虛函數的類,派生出來的對象,都有這麼一個vptr。當我們用這個對象調用虛函數時,事實上是通過vptr找到虛函數表,再找出虛函數的真正地址。

虛函數表的內容是依據類中的虛函數聲明次序,一一填入函數指針。派生類會繼承基類的虛函數表(以及所有其它可以繼承的成員),當我們再派生類中改寫虛函數時,虛函數表就受了影響:表中元素所指的函數地址將不再是基類的函數地址,而是派生類的函數地址。

 作者“志在千裡”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved