亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

探究多態&虛表

2019-11-08 18:38:39
字體:
來源:轉載
供稿:網友

多態

所謂多態,就是當使用基類的指針或引用調用重寫的虛函數時,當指向父類調用的就是父類的虛函數,指向子類調用的就是子類的虛函數。 下面來通過代碼來理解多態的含義

class AA{public: virtual void fun() { cout << "AA::fun()" << endl; }};class BB : public AA{public: virtual void fun() { cout << "BB::fun()" << endl; }};void FUN(AA& a){ a.fun();}void Test1(){ AA a; BB b; FUN(a); FUN(b);}

結果為: AA::fun() BB::fun() C++的多態分為靜態多態動態多態。 靜態多態:靜態多態就是重載,因為是在編譯期決議確定。也就是在編譯的時候就能確定函數的地址。 動態多態:是通過繼承重寫基類的虛函數實現的多態,在運行期間決議確定。也就是編譯期間不知道函數的地址,只知道存儲函數地址的虛表的地址。 C++中多態的實現就是通過虛函數實現的,虛函數的對象實例中都存在一張虛函數表。

虛函數表

虛函數表是通過一塊連續內存來存儲虛函數的地址,指明了實際調用的虛函數指針。

class AA{public: virtual void fun1() {} virtual void fun2() {}PRotected: int _a;};void Test2(){ AA a;}

這里寫圖片描述 通過監視窗口可以看到,對象a的首部存儲了一個地址,指向的空間存儲了虛函數的地址,稱為虛函數表。所以sizeof(a)的值為8。

【含有虛函數的單繼承對象模型】

typedef void(*FUNC) ();class AA{public: virtual void fun1() { cout << "AA::fun1()" << endl; } virtual void fun2() { cout << "AA::fun2()" << endl; }protected: int _a;};class BB : public AA{public: virtual void fun1() { cout << "BB::fun1()" << endl; } virtual void fun3() { cout << "BB::fun3()" << endl; }protected: int _b;};void PrintfVTable(int *VTable){ cout << "虛表地址:" << "0x" << VTable << endl; for (int i = 0; VTable[i] != 0; ++i) { cout <<"虛函數地址:0x"<< VTable[i] << " "; FUNC f = (FUNC)VTable[i]; f(); } cout << endl;}void Test3(){ AA a; BB b; int* VTable1 = (int *)(*(int *)&a); int* VTable2 = (int *)(*(int *)&b); PrintfVTable(VTable1); PrintfVTable(VTable2);}

通過這種方式,可以依次打印出虛表地址以及虛函數的地址,結果如下: 這里寫圖片描述 這里寫圖片描述 虛表后面的0標志著虛表結束,類似于字符串結束符“/0”。

提示:若在windows平臺vs下,程序出現異常中斷,可以“清理解決方案”,這是由于編譯器的小bug,沒有在虛表最后加上0,出現死循環。

【含有虛函數的多繼承對象模型】

typedef void(*FUNC) ();class AA1{public: virtual void fun1() { cout << "AA1::fun1()" << endl; } virtual void fun2() { cout << "AA1::fun2()" << endl; }protected: int _a1;};class AA2{public: virtual void fun1() { cout << "AA2::fun1()" << endl; } virtual void fun2() { cout << "AA2::fun2()" << endl; }protected: int _a2;};class BB : public AA1,public AA2{public: virtual void fun1() { cout << "BB::fun1()" << endl; } virtual void fun3() { cout << "BB::fun3()" << endl; }protected: int _b;};void PrintfVTable(int *VTable){ cout << "虛表地址:" << "0x" << VTable << endl; for (int i = 0; VTable[i] != 0; ++i) { cout <<"虛函數地址:0x"<< VTable[i] << " "; FUNC f = (FUNC)VTable[i]; f(); } cout << endl;}void Test4(){ BB b; int* VTable = (int *)(*(int *)&b); PrintfVTable(VTable); VTable = (int *)(*((int*)&b + sizeof (AA1) / 4)); PrintfVTable(VTable);}

這里寫圖片描述 這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情区在线播放| 久久99久久99精品免观看粉嫩| 91亚洲精品视频| 精品福利樱桃av导航| 亚洲精品一区久久久久久| 国产日产欧美a一级在线| 精品国产一区二区三区久久狼5月| 成人免费在线视频网址| 深夜福利一区二区| 亚洲午夜国产成人av电影男同| 日韩精品视频在线观看网址| 亚洲网站在线播放| 欧美高清在线视频观看不卡| 中文字幕亚洲一区二区三区| 日韩av影片在线观看| 欧美一乱一性一交一视频| 欧美与黑人午夜性猛交久久久| 欧美成人精品在线播放| 亚洲成年人在线播放| 精品国偷自产在线| 欧美日韩亚洲一区二区| 成人观看高清在线观看免费| 日韩中文字幕在线| 91在线观看免费高清完整版在线观看| 国产一区玩具在线观看| 国产精品日日摸夜夜添夜夜av| 欧美电影在线观看网站| 亚洲国产欧美自拍| 亚洲精品一区二区久| 国产成人亚洲综合91精品| 在线看福利67194| 亚洲一区二区三区在线视频| 欧美综合第一页| 国产精品黄页免费高清在线观看| 91wwwcom在线观看| 国产伦精品免费视频| 国产精品美乳一区二区免费| 亚洲精品国产suv| 91美女片黄在线观| 亚洲香蕉伊综合在人在线视看| 91精品国产高清久久久久久久久| 欧美放荡办公室videos4k| 欧美性生活大片免费观看网址| 欧美二区乱c黑人| 成人黄色在线免费| 在线观看国产精品91| 黑人巨大精品欧美一区免费视频| 91av在线视频观看| 亚洲成人激情在线观看| 国产精品一区专区欧美日韩| 欧美一级电影在线| 久久av在线播放| 成人精品久久久| 欧美性生活大片免费观看网址| 亚洲日本成人女熟在线观看| 欧美午夜无遮挡| www.欧美免费| 国产精品第10页| 亚洲第一区在线| 91在线中文字幕| 日韩黄在线观看| 91视频国产精品| 久久中文字幕视频| 亚洲精品美女免费| 国产在线精品自拍| 欧美疯狂xxxx大交乱88av| 成人免费视频网| 亚洲网站视频福利| 狠狠躁夜夜躁人人爽天天天天97| 九九热r在线视频精品| 在线精品国产欧美| 中文字幕日韩欧美精品在线观看| 亚洲欧美日韩在线高清直播| 精品自拍视频在线观看| 国产精品美女久久久久久免费| 日韩av在线网站| 久久久久国产精品免费网站| 亚洲国产高潮在线观看| 一本一道久久a久久精品逆3p| 欧美日韩免费一区| 国内精品中文字幕| 国产裸体写真av一区二区| www高清在线视频日韩欧美| 久久精品国产一区二区三区| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲网站在线看| 懂色aⅴ精品一区二区三区蜜月| 亚洲欧洲视频在线| 欧美日韩国产91| 国色天香2019中文字幕在线观看| 日韩性xxxx爱| 色婷婷久久av| 日韩av免费在线| 国产成人亚洲综合青青| 孩xxxx性bbbb欧美| 久久精品国产91精品亚洲| 韩国精品久久久999| 伊人久久久久久久久久久久久| 欧美老少做受xxxx高潮| 自拍偷拍亚洲欧美| 日韩精品在线看| 欧美怡春院一区二区三区| 日韩小视频网址| 亚洲国产成人精品一区二区| 亚洲国产精品va在线看黑人| 大胆人体色综合| 亚洲级视频在线观看免费1级| 国产亚洲aⅴaaaaaa毛片| 亚洲欧美综合另类中字| 欧美特级www| 日韩欧美在线网址| 久久久久久午夜| 日本精品一区二区三区在线播放视频| www国产精品视频| 国产一区二区三区在线免费观看| 日韩av片永久免费网站| 97国产精品视频| 国产视频在线观看一区二区| 久久精品视频播放| 美乳少妇欧美精品| 136fldh精品导航福利| 日本欧美中文字幕| 亚洲美女性生活视频| 精品日韩视频在线观看| 最近2019中文字幕第三页视频| 亚洲欧美日韩第一区| 高清视频欧美一级| 精品久久久久久中文字幕大豆网| 97精品视频在线播放| 国产精品夫妻激情| 国产精品av网站| 4438全国亚洲精品在线观看视频| www欧美xxxx| 亚洲电影免费观看| 国产精品扒开腿爽爽爽视频| 日韩在线观看免费高清完整版| 欧美午夜无遮挡| 亚洲欧美精品中文字幕在线| 国内偷自视频区视频综合| 欧美视频第一页| 91av在线免费观看| 日韩电影免费在线观看中文字幕| 97在线视频国产| 大胆欧美人体视频| 51久久精品夜色国产麻豆| 亚洲视频axxx| 宅男66日本亚洲欧美视频| 91av在线播放视频| 高清欧美性猛交| 国产91色在线播放| 亚洲欧美国产日韩天堂区| 欧美日韩加勒比精品一区| 欧美在线一级视频| 成人黄色短视频在线观看| 欧美精品精品精品精品免费| 不卡毛片在线看| 国产精品九九久久久久久久| 久久久久久久爱| 久久综合伊人77777蜜臀| 在线免费观看羞羞视频一区二区| 日韩少妇与小伙激情| 国产精品99久久久久久www| 久久香蕉频线观| 日韩av电影手机在线|