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

溫馨提示×

溫馨提示×

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

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

C++中虛函數內存結構是怎么樣的

發布時間:2022-01-14 17:16:39 來源:億速云 閱讀:138 作者:小新 欄目:編程語言

小編給大家分享一下C++中虛函數內存結構是怎么樣的,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

虛函數的內存結構虛函數的內存結構

一、 基本概念

    C++中的虛函數的作用主要是實現了多態的機制。
    關于多態,簡而言之就是用父類型別的指針指向其子類的實例,然后通過父類的指針調用實際子類的成員函數。這種技術可以讓父類的指針有“多種形態”,這是一種泛型技術。
    所謂泛型技術,說白了就是試圖使用不變的代碼來實現可變的算法。比如:模板技術,RTTI技術,虛函數技術,要么是試圖做到在編譯時決議,要么試圖做到運行時決議。

二、 虛函數的定義與派生類中的重定義 

class 類名
{
public:
    virtual 成員函數說明;
}
 
class 類名:訪問修飾符 基類名
{
public:
    virtual 成員函數說明;
}

三、 虛函數在內存中的結構

1.我們先看一個例子

  1. #include <iostream>

  2. using namespace std;


  3. class A

  4. {

  5.     public:

  6.         virtual void fun0() { cout << "A::fun0" << endl; }

  7. };


  8. int main(void)

  9. {

  10.     A a;


  11.     cout << "size
    of A = " << sizeof(a) << endl;


  12.     return 0;

  13. }

 結果:size of A = 4

2.如果再添加一個虛函數
    virtual void fun1() { cout << "A::fun1" << endl; }

    得到相同的結果。如果去掉函數前面的virtual修飾符 結果:size of A = 1 

3.在看下面的結果

  1. #include <iostream>

  2. using namespace std;


  3. class A

  4. {

  5.     public:

  6.         virtual void fun0() { cout << "A::fun0" << endl; }

  7.     int a;

  8.     int b;

  9. };


  10. int main(void)

  11. {

  12.     A a;


  13.     cout << "size
    of A = " << sizeof(a) << endl;


  14.     return 0;

  15. }

結果:size of A = 12
在 lip32 平臺下指針在內存中占4個字節,虛函數在一個虛函數表(VTABLE)中保存函數地址。
C++中虛函數內存結構是怎么樣的

在看下面例子:

  1. #include <iostream>

  2. using namespace std;


  3. class A

  4. {

  5.     public:

  6.         virtual void fun0() { cout << "A::fun0" << endl; }

  7.         virtual void fun1() { cout << "A::fun1" << endl; }

  8. };


  9. int main(void)

  10. {

  11.     A a;


  12.     cout << "size
    of A = " << sizeof(a) << endl;


  13.     return 0;

  14. }

結果:
size of A = 4 
C++中虛函數內存結構是怎么樣的

4.我們再來看看繼承中虛函數的內存結構

先看下面的例子

  1. #include <iostream>

  2. using namespace std;


  3. class A

  4. {

  5.     public:

  6.         virtual void fun0() { cout << "A::fun0" << endl; }

  7. };


  8. class B

  9. {

  10.     public:

  11.         virtual void fun0() { cout << "B::fun0" << endl; }

  12. };


  13. class C

  14. {

  15.     public:

  16.         virtual void fun0() { cout << "C::fun0" << endl; }

  17. };


  18. class D : public A, public B, public C

  19. {};


  20. int main(void)

  21. {

  22.     D d;


  23.     cout << "size
    of D = " << sizeof(d) << endl;


  24.     return 0;

  25. }

結果:size is = 12
C++中虛函數內存結構是怎么樣的


以上是“C++中虛函數內存結構是怎么樣的”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

c++
AI

乌苏市| 长阳| 清水县| 航空| 南漳县| 海阳市| 赣榆县| 什邡市| 凤阳县| 临澧县| 贡觉县| 霞浦县| 怀宁县| 平阴县| 水富县| 阿勒泰市| 齐齐哈尔市| 建瓯市| 尤溪县| 大田县| 莲花县| 金门县| 盘锦市| 芮城县| 宜兰县| 双流县| 清丰县| 青阳县| 怀柔区| 富平县| 老河口市| 柘荣县| 且末县| 罗江县| 密云县| 昭觉县| 奉新县| 双柏县| 土默特右旗| 青海省| 赣榆县|