91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

怎么實現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

丽水市| 达尔| 汾阳市| 广饶县| 凤山县| 苍溪县| 满洲里市| 东山县| 芦溪县| 疏勒县| 揭东县| 兰溪市| 富宁县| 双鸭山市| 万安县| 三原县| 曲阜市| 页游| 延寿县| 黄梅县| 潼南县| 尉犁县| 天祝| 苗栗县| 新余市| 伊川县| 望谟县| 陇西县| 墨竹工卡县| 六盘水市| 威宁| 洛隆县| 衡阳市| 福建省| 和平区| 墨竹工卡县| 伊宁县| 玉林市| 丽水市| 西和县| 宁海县|