日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

[C++基础]025_虚函数和虚函数表

發布時間:2024/4/11 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [C++基础]025_虚函数和虚函数表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先有一個有趣的東西:如何不通過對象來訪問對象中的虛函數呢?我們來看下面這樣一段代碼:

1 #include <iostream> 2 using namespace std; 3 4 typedef void (*Fun)(void); // 函數指針 5 6 class A{ 7 public: 8 virtual void testA(void){ 9 cout<<"A is Print."<<endl; 10 } 11 12 virtual void testB(void){ 13 cout<<"B is Print."<<endl; 14 } 15 }; 16 17 int main(){ 18 A a; 19 Fun function = NULL; 20 cout<<"對象a的地址:"<<&a<<endl; 21 cout<<"虛函數表地址:"<<(int*)(&a)<<endl; 22 cout<<"虛函數表中第一個虛函數地址"<<(int*)*(int*)(&a)<<endl; 23 function = (Fun)*((int*)*(int*)(&a)); 24 function(); 25 system("pause"); 26 return 0; 27 }

輸出結果:

對象a的地址:0043FF1C 虛函數表地址:0043FF1C 虛函數表中第一個虛函數地址01367880 A is Print. 請按任意鍵繼續. . .

可見,通過【(int*)*(int*)(&a)】就可以獲取對象a的第一個虛函數地址,通過【(int*)*(int*)(&a)+1】就可以獲取第二個虛函數的地址,從而就可以調用該對象的虛函數了。

通過函數指針可以訪問虛函數的核心是因為有一個【虛函數表】的東西存在著,本文就不贅述了,有一篇博客寫的相當清晰,見鏈接:http://blog.csdn.net/haoel/article/details/1948051/

轉載于:https://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/13/2722071.html

總結

以上是生活随笔為你收集整理的[C++基础]025_虚函数和虚函数表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。