程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-他們說這是關於虛函數的,可是我看不懂,求解。

c++-他們說這是關於虛函數的,可是我看不懂,求解。

編輯:編程綜合問答
他們說這是關於虛函數的,可是我看不懂,求解。

圖片

最佳回答:


c++知識點:這個類A 是一個含有虛函數的類,那麼此時運行時編譯器會為他生成虛表,並且在A類的對象內存的起始位置加了虛表的首地址,所以此時對象的大小會比
不含有虛函數的類對象多了4個字節(32位機下),因為編譯器需要通過這個指針去運行時尋找虛表。
然後看看你的代碼:
在你的a對象的前四個字節存的是虛表的首地址(32位機,64位為8字節), 此事聲明了一個函數指針類型,fp, 然後定義一個此類型的變量myfunc
然後myfunc = (*((int*)*((int*)&a))); 這一行代碼是最核心的,也是最難理解的。下面我用文字敘述“=”右邊的表達式: 由內到外先對a對象取地址運算
然後轉成int*類型,再取*運算,這一步就得到了a的前四個字節,也就是以上說的虛表的首地址。最後在轉再取*運算主要是將myfunc關聯到test函數入口
地址上面。這樣的話你調用myfunc();就找到了虛表裡面的test函數。達到間接調用的目的。

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