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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

虚函数原理1

發(fā)布時(shí)間:2024/9/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 虚函数原理1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

部分參考:http://blog.csdn.net/devilkin64/article/details/5939613

虛函數(shù)表的建立是取決于定義類的時(shí)候是否包含虛函數(shù),如果有類函數(shù)/ 方法聲明為虛,則改類會(huì)建立一張?zhí)摫?在網(wǎng)上找到一個(gè)牛人用匯編的方法論證虛 表是存放在常量區(qū)內(nèi)(具體論證就省略,否則就扯遠(yuǎn)了). 繼承類會(huì)同樣建立一張?zhí)摫?并將覆蓋虛表中父類虛函數(shù)的地址. 在編譯階段,編譯器為每個(gè)包含虛函數(shù)的類創(chuàng)建一個(gè)虛表,這個(gè)類的所有對(duì)象中的虛表指針,都指向這同一份虛表;一般虛表指針放在對(duì)象的開始位置; 虛函數(shù)表是在代碼編譯生成,程序載入內(nèi)存的時(shí)候,放在內(nèi)存常量區(qū). 虛函數(shù)指針是在對(duì)象建立時(shí)由構(gòu)造函數(shù)生成并保存于對(duì)象地 址首部.虛函數(shù)指針:虛函數(shù)指針是在實(shí)例化對(duì)象 的時(shí)候由構(gòu)造函數(shù)生成的指向虛表的指針.放在對(duì)象地址的首位. 下面代碼用于顯 示虛表及虛表指針.

class base { public: int a;virtual void Print(){cout<<"in base print\n";} };class d1:public base { public:void Print(){cout<<"in d1 print\n";}void d1Print(){cout<<"d1 self print \n";} };class d2:public d1 { public:void Print(){cout<<"in d2 print\n";}void d2Print(){cout<<"d2 self print \n";} };typedef void (*pfun)();int main() {base *md2 = new d2;md2->Print();d1 *md1 = new d2;md1->Print();//上面兩個(gè)例子說明,虛函數(shù)具有向下傳遞的特性;只要在最開始的基類中定義虛函數(shù),則其他所有的子孫類都默認(rèn)是虛函數(shù)int *p2 =(int *) md2;//md2本來是指向?qū)ο蟮囊粋€(gè)指針,將此指針轉(zhuǎn)換為指向一個(gè)int數(shù)組的指針,這樣就能像訪問數(shù)組一樣訪問對(duì)象里面的數(shù)據(jù)cout<<*p2<<endl;//*p2是指放在對(duì)象md2中第一個(gè)位置的元素的值,這個(gè)值就是虛表的地址p2 =(int *)(*p2);//*p2是虛表的地址,也就是指虛表的指針,我們要把虛表也表示成數(shù)組的形式,把指向虛表的指針轉(zhuǎn)換為指向一個(gè)Int數(shù)組的指針printf("%x\n",p2);//cout<<p2<<endl;//printf("%d\n",p2);//上面三個(gè)輸出的值都是相等的,只不過是十進(jìn)制或者十六進(jìn)制表示的不同(pfun(*p2))();int *p1 = (int *) md1;cout<<*p1<<endl;//上面所有的輸出都是顯示的是類d2的虛表的地址,也就是說不管類有多少個(gè)對(duì)象,但是虛表只有一份/*int i =0;int *p = &i;cout<<&i<<" "<<p<<endl;*/delete md1;delete md2; }



總結(jié)

以上是生活随笔為你收集整理的虚函数原理1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。