中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現C++虛函數表中的虛函數

發布時間:2021-08-18 20:08:53 來源:億速云 閱讀:144 作者:chen 欄目:編程語言

這篇文章主要介紹“怎么實現C++虛函數表中的虛函數”,在日常操作中,相信很多人在怎么實現C++虛函數表中的虛函數問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么實現C++虛函數表中的虛函數”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

虛函數表

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

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

這里我們著重看一下這張虛C++虛函數表。在C++的標準規格說明書中說到,編譯器必需要保證虛函數表的指針存在于對象實例中最前面的位置(這是為了保證正確取到虛函數的偏移量)。 這意味著我們通過對象實例的地址得到這張虛函數表,然后就可以遍歷其中函數指針,并調用相應的函數。

聽我扯了那么多,我可以感覺出來你現在可能比以前更加暈頭轉向了。 沒關系,下面就是實際的例子,相信聰明的你一看就明白了。 假設我們有這樣的一個類:

class Base {    private:    virtual void f() { cout << "Base::f" << endl; }    };    class Derive : public Base{    };    typedef void(*Fun)(void);    void main() {    Derive d;    Fun pFun = (Fun)*((int*)*(int*)(&d)+0);    pFun();    }

C++這門語言是一門Magic的語言,對于程序員來說,我們似乎永遠摸不清楚這門語言背著我們在干了什么。需要熟悉這門語言,我們就必需要了解C++里面的那些東西,需要去了解C++中那些危險的東西。不然,這是一種搬起石頭砸自己腳的C++虛函數表

到此,關于“怎么實現C++虛函數表中的虛函數”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

洪洞县| 车致| 崇信县| 宁都县| 闸北区| 同德县| 谢通门县| 高要市| 铜梁县| 北宁市| 榆社县| 永川市| 吴桥县| 紫金县| 资讯| 十堰市| 汉中市| 扎鲁特旗| 元阳县| 琼中| 阿巴嘎旗| 淮南市| 南岸区| 黄龙县| 古交市| 巴彦淖尔市| 阿尔山市| 海兴县| 拜城县| 巴马| 兴宁市| 丹阳市| 尚义县| 泽普县| 仁寿县| 即墨市| 松江区| 中西区| 唐河县| 城步| 缙云县|