[C++基础]025_虚函数和虚函数表
生活随笔
收集整理的這篇文章主要介紹了
[C++基础]025_虚函数和虚函数表
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
首先有一個(gè)有趣的東西:如何不通過(guò)對(duì)象來(lái)訪問(wèn)對(duì)象中的虛函數(shù)呢?我們來(lái)看下面這樣一段代碼:
1 #include <iostream> 2 using namespace std; 3 4 typedef void (*Fun)(void); // 函數(shù)指針 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<<"對(duì)象a的地址:"<<&a<<endl; 21 cout<<"虛函數(shù)表地址:"<<(int*)(&a)<<endl; 22 cout<<"虛函數(shù)表中第一個(gè)虛函數(shù)地址"<<(int*)*(int*)(&a)<<endl; 23 function = (Fun)*((int*)*(int*)(&a)); 24 function(); 25 system("pause"); 26 return 0; 27 }輸出結(jié)果:
對(duì)象a的地址:0043FF1C 虛函數(shù)表地址:0043FF1C 虛函數(shù)表中第一個(gè)虛函數(shù)地址01367880 A is Print. 請(qǐng)按任意鍵繼續(xù). . .可見(jiàn),通過(guò)【(int*)*(int*)(&a)】就可以獲取對(duì)象a的第一個(gè)虛函數(shù)地址,通過(guò)【(int*)*(int*)(&a)+1】就可以獲取第二個(gè)虛函數(shù)的地址,從而就可以調(diào)用該對(duì)象的虛函數(shù)了。
通過(guò)函數(shù)指針可以訪問(wèn)虛函數(shù)的核心是因?yàn)橛幸粋€(gè)【虛函數(shù)表】的東西存在著,本文就不贅述了,有一篇博客寫(xiě)的相當(dāng)清晰,見(jiàn)鏈接:http://blog.csdn.net/haoel/article/details/1948051/
轉(zhuǎn)載于:https://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/13/2722071.html
總結(jié)
以上是生活随笔為你收集整理的[C++基础]025_虚函数和虚函数表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hive的作用
- 下一篇: [Effective C++读书笔记]0