国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

深度剖析C++虛表工作機制講述

開發(fā) 后端
沒有覆蓋父類的虛函數(shù)是毫無意義的。我之所以要講述沒有覆蓋的情況,主要目的是為了給一個對比,我認為C++虛表只會使我們的工作更簡單和更輕松。

下面主要進行C++虛表的介紹與說明,對于多態(tài),簡而言之就是用父類型別的指針指向其子類的實例,然后通過父類的指針調用實際子類的成員函數(shù)。這種技術可以讓父類的指針有“多種形態(tài)”,這是一種泛型技術。

所謂泛型技術,說白了就是試圖使用不變的代碼來實現(xiàn)可變的算法。比如:模板技術,RTTI技術,虛函數(shù)技術,要么是試圖做到在編譯時決議,要么試圖做到運行時決議。 關于虛函數(shù)的使用方法,我在這里不做過多的闡述。大家可以看看相關的C++的書籍。在這篇文章中,我只想從虛函數(shù)的實現(xiàn)機制上面為大家 一個清晰的剖析。

當然,相同的文章在網(wǎng)上也出現(xiàn)過一些了,但我總感覺這些文章不是很容易閱讀,大段大段的代碼,沒有圖片,沒有詳細的說明,沒有比較,沒有舉一反三。不利于學習和閱讀,所以這是我想寫下這篇文章的原因。也希望大家多給我提意見。 言歸正傳,讓我們一起進入虛函數(shù)的世界。

C++虛表
C++ 了解的人都應該知道虛函數(shù)(Virtual Function)是通過一張?zhí)摵瘮?shù)表(Virtual Table)來實現(xiàn)的。簡稱為V-Table。在這個表中,主是要一個類的虛函數(shù)的地址表,這張表解決了繼承、覆蓋的問題,保證其容真實反應實際的函數(shù)。#t#

這樣,在有虛函數(shù)的類的實例中這個表被分配在了這個實例的內存中,所以,當我們用父類的指針來操作一個子類的時候,這張?zhí)摵瘮?shù)表就顯得由為重要了,它就像一個地圖一樣,指明了實際所應該調用的函數(shù)。

這里我們著重看一下這張?zhí)摵瘮?shù)表。在C++虛表的標準規(guī)格說明書中說到,編譯器必需要保證虛函數(shù)表的指針存在于對象實例中最前面的位置(這是為了保證正確取到虛函數(shù)的偏移量)。 這意味著我們通過對象實例的地址得到這張?zhí)摵瘮?shù)表,然后就可以遍歷其中函數(shù)指針,并調用相應的函數(shù)。 聽我扯了那么多,我可以感覺出來你現(xiàn)在可能比以前更加暈頭轉向了。 沒關系,下面就是實際的例子,相信聰明的你一看就明白了。

假設我們有這樣的一個類:

  1. class Base {   
  2.  
  3. public:   
  4.  
  5. virtual void f() { cout << "Base::f" << endl; }   
  6.  
  7. virtual void g() { cout << "Base::g" << endl; }   
  8.  
  9. virtual void h() { cout << "Base::h" << endl; }   
  10.  
  11. };   
  12.  
  13. 按照上面的說法,我們可以通過Base的實例來得到虛函數(shù)表。 下面是實際例程:   
  14.  
  15. typedef void(*Fun)(void);   
  16.  
  17. Base b;   
  18.  
  19. Fun pFun = NULL;   
  20.  
  21. cout << "虛函數(shù)表地址:" << (int*)(&b) << endl;   
  22.  
  23. cout << "虛函數(shù)表 — 第一個函數(shù)地址:" << (int*)*(int*)(&b) << endl;   
  24.  
  25. // Invoke the first virtual function   
  26.  
  27. pFun = (Fun)*((int*)*(int*)(&b));   
  28.  
  29. pFun();  

通過這個示例,我們可以看到,我們可以通過強行把&b轉成int *,取得虛函數(shù)表的地址,然后,再次取址就可以得到第一個虛函數(shù)的地址了,也就是Base::f(),這在上面的程序中得到了驗證(把int* 強制轉成了函數(shù)指針)。通過這個示例,我們就可以知道如果要調用Base::g()和Base::h(),其代碼如下:

  1. (Fun)*((int*)*(int*)(&b)+0); // Base::f()   
  2.  
  3. (Fun)*((int*)*(int*)(&b)+1); // Base::g()   
  4.  
  5. (Fun)*((int*)*(int*)(&b)+2); // Base::h()  

下面,我將分別說明“無覆蓋”和“有覆蓋”時的虛函數(shù)表的樣子。沒有覆蓋父類的C++虛表是毫無意義的。我之所以要講述沒有覆蓋的情況,主要目的是為了給一個對比。在比較之下,我們可以更加清楚地知道其內部的具體實現(xiàn)。

責任編輯:chenqingxiang 來源: qqread
相關推薦

2022-07-18 15:32:37

C++虛函數(shù)表

2010-01-28 16:31:54

C++類型

2010-01-26 14:46:42

C++語言

2010-01-15 10:32:21

C++語言

2010-01-13 10:16:42

C++軟件

2010-01-27 15:50:23

C++復雜性

2010-01-26 17:16:33

C++應用程序

2010-01-28 14:54:01

C++資源管理

2009-12-25 09:17:50

2010-01-21 13:33:44

C++基類

2010-01-11 17:43:23

C++程序設計

2010-01-11 10:19:57

C++開發(fā)工具

2010-02-06 09:53:26

C++ void

2015-11-30 11:14:59

C++對象池自動回收

2010-01-12 15:03:33

C++代碼

2010-01-12 10:40:22

C++程序員

2010-01-19 15:36:02

C++語言

2010-02-01 13:25:32

Python腳本

2010-01-14 17:42:47

CC++

2010-02-01 11:22:09

C++虛函數(shù)
點贊
收藏

51CTO技術棧公眾號

日韩一区二区三| 午夜日韩在线电影| 国产精品传媒入口麻豆| 亚洲精品理论电影| 国产精品护士白丝一区av| 69堂成人精品视频免费| 青青视频在线播放| 久热在线观看视频| 中日韩免费毛片| 51社区在线成人免费视频| 国产成人久久精品77777最新版本| 色综合久久中文字幕| 欧美亚洲成人xxx| 日本www高清视频| 动漫一区二区三区| 成人天堂资源www在线| 这里只有精品视频在线观看| 国产精品视频一区二区高潮| 91热这里只有精品| 成人国产精品| 国产成人h网站| 亚洲欧美日韩中文视频| 亚洲欧美日韩精品在线| 精精国产xxxx视频在线| 国产日韩视频| 日韩欧美国产午夜精品| 欧美一区二区三区四区夜夜大片 | 日本在线播放一区| 国产网站在线免费观看| 1024国产精品| 国产精品高潮粉嫩av| 亚洲男男gay视频| 亚洲九九视频| 欧美日韩国产三级| 在线观看欧美一区| 你懂得影院夜精品a| 丁香网亚洲国际| 日韩欧美精品一区二区| 欧美人成网站| 精品福利在线导航| 亚洲一区 在线播放| 日韩免费福利视频| 欧美国产成人精品| 国产精品亚洲欧美导航| 国产精品白浆| 欧美日韩高清一区二区| 亚洲尤物在线视频| 日韩二区三区四区| 中文字幕欧美专区| 成年人小视频网站| 97久久夜色精品国产| 欧美一区二区三区视频在线| 精品久久免费观看| 国产精品毛片av| 久久国产精品影片| 桃乃木香奈av在线| 久久久精品性| 国产亚洲xxx| 日韩欧美亚洲国产精品字幕久久久| 丝袜足控免费网站xx网站| 成人精品影视| av资源亚洲| 国产高清一区二区三区视频| 久久精品免费观看| 欧美成人精品影院| 999精品视频在线观看| 岛国视频午夜一区免费在线观看| 久久久久网址| 亚洲一区电影| 日韩美女主播视频| 少妇视频在线观看| 久久精品夜夜夜夜夜久久| 欧美日韩久久久| 91极品视频在线观看| 亚洲少妇第一页| 免费成人在线观看视频| 午夜久久福利| 欧美精品黄色| 日韩精品免费视频| 国产在线拍揄自揄拍无码| 97品白浆高清久久久久久| 日韩精品卡一| 路边理发店露脸熟妇泻火| 国产91在线观看| 美女999久久久精品视频| 18岁网站在线观看| 亚洲在线www| 久久免费视频2| 懂色av中文一区二区三区| 日本三级亚洲精品| 日韩精品一区二区三区在线| heyzo一区| 天天综合色天天综合| 可以看毛片的网址| 亚洲尤物在线| 国产精品久久在线观看| 国产不卡网站| 久久频这里精品99香蕉| 亚洲风情在线资源| 欧美视频在线一区二区三区| 成人免费视频网站在线看| 国产一区二区91| 波多野结衣一区二区三区在线观看| 丰满少妇一区| 国产剧情日韩欧美| 国内成人免费视频| 欧美一区视久久| 国产日韩欧美综合一区| 男女激烈动态图| 亚洲在线国产日韩欧美| 欧美三级一级片| 欧美在线视频全部完| 中文av在线播放| 亚洲欧美第一页| 欧美在线影院| 国产三级三级三级看三级| 91精品国模一区二区三区| 一区二区三区四区视频免费观看| 国内一区二区在线视频观看 | 欧美资源在线观看| 91精品国产色综合久久不卡粉嫩| 亚洲影视九九影院在线观看| 91免费看视频| 免费 成 人 黄 色| av一本久道久久综合久久鬼色| 成人手机视频在线| 午夜精品123| 大桥未久女教师av一区二区| 亚洲三区四区| 丁香婷婷综合网| 日本激情视频在线观看| 欧美亚洲国产一区在线观看网站| 超碰国产精品一区二页| 日本日本精品二区免费| 亚洲成人综合视频| 一色桃子在线| 欧美激情按摩在线| 北条麻妃一区二区三区在线| 日本免费高清一区二区| 精品欧美一区二区三区| 亚洲精品一区二区三区在线| 女同性恋一区二区| 日韩一区二区免费在线电影| 亚洲精品二区三区| 噜噜噜噜噜久久久久久91| 亚洲永久免费| 国产视频网站在线| 欧美tickling网站挠脚心| av老司机在线观看| 精品久久久三级| 在线中文字幕不卡| 亚洲精品小说| 毛片在线免费| 亚洲精品一区二区三区福利| 亚洲网色网站| 在线免费av观看| 成人网在线观看| 蜜桃视频在线观看一区| 毛片在线不卡| 最近2019年日本中文免费字幕| 96视频在线观看欧美| 国产91视频一区| 国产精品二区一区二区aⅴ污介绍| 巨茎人妖videos另类| 亚洲国产精品久久久久久女王| 91麻豆精品国产91久久久久| 99亚洲视频| 国产一区视频免费观看| 色av吧综合网| 久久精品亚洲乱码伦伦中文| 欧美性孕妇孕交| 91亚色免费| 欧美日韩视频第一区| 伊人精品在线| 成年人免费在线播放| 亚洲成a人片在线不卡一二三区| 色综合www| 日韩精品大片| 亚洲激情视频网| 狼人精品一区二区三区在线 | 国产欧美精品aaaaaa片| 中文字幕在线免费不卡| 欧美黄色录像| 水蜜桃一区二区| 亚洲综合免费观看高清完整版 | 在线免费三级电影网站| 综合国产精品久久久| 中文字幕视频在线免费欧美日韩综合在线看 | 国产1区2区3区中文字幕| 中文字幕亚洲天堂| 中文字幕中文字幕中文字幕亚洲无线 | 亚洲综合社区| 中文字幕资源网在线观看免费 | 日韩xxxx视频| 久久综合久久八八| 影音先锋中文字幕一区| 国产精品久久麻豆| 丰满爆乳一区二区三区| 国产精品入口免费视| 亚洲成人黄色在线观看|