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

溫馨提示×

溫馨提示×

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

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

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

洪雅县| 辽宁省| 巴东县| 余姚市| 六盘水市| 大理市| 阿巴嘎旗| 古田县| 清新县| 道孚县| 阳东县| 资中县| 永泰县| 奉贤区| 轮台县| 纳雍县| 闸北区| 仁布县| 济宁市| 松溪县| 谷城县| 宕昌县| 远安县| 呼和浩特市| 邓州市| 平乐县| 明星| 龙南县| 盐亭县| 甘肃省| 庆元县| 伊宁市| 丘北县| 临夏市| 留坝县| 三穗县| 永川市| 武陟县| 张家港市| 南安市| 临夏县|