[C++基础]025_虚函数和虚函数表
生活随笔
收集整理的這篇文章主要介紹了
[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_虚函数和虚函数表的全部內容,希望文章能夠幫你解決所遇到的問題。