亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C++中虛擬函數的內存分配機制是什么

發布時間:2020-08-15 13:47:51 來源:億速云 閱讀:146 作者:小新 欄目:開發技術

小編給大家分享一下C++中虛擬函數的內存分配機制是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

因為虛擬函數的地址翻譯取決于對象的內存地址,而不取決于數據類型(編譯器對函數

調用的合法性檢查取決于數據類型)。原來,如果類中定義了虛擬函數,該類及其派生類

就要生成一張虛函數表,即vtable。而在類的對象地址空間中存儲一個該虛函數表的入口,

占4個字節,這個入口地址是在構造對象是由編譯器寫入的。

有如下C++程序:

//#include<stdio.h>

#include<iostream>
using namespace std;

class CMem	
{
	
public:
 CMem(){}
public:
 int m_first;
private:
 unsigned char m_second;
 
public :
 void fun1();
 virtual int funOver(){return 1;}
 
};



class CMemSub : public CMem
{

public:
 CMemSub(){}

public:
 int m_three;

private:
 int m_four;
 
public:
 void fun3();
 virtual int funOver(){return 2;}

virtual int fun4(){return 3;}


};


int main()
{ 
 CMem a,*pMem;
 CMemSub b;
  pMem = &a;
 printf("%d/n",pMem->funOver());
 
  pMem = &b;
  printf("%d/n",pMem->funOver());

 
	
	return 0;
}

程序運行結果為:

1

2

這里涉及到虛函數的工作機制,由于對象的內存空間中包含了虛函數表的入口,

編譯器能夠由這個入口找到適當的虛函數,這個函數的地址不再由數據類型決定了。

語句pMem = &b;使pMem指向對象b的內存空間,調用pMem->funOver()時,

編譯器得到了對象b的vtable入口,并由這個入口找到了CMemSub::funOver()虛函數地址。到此,虛函數的秘密終于大白于天下了。虛函數是C++語法的重點和難點。

看完了這篇文章,相信你對C++中虛擬函數的內存分配機制是什么有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

商洛市| 焉耆| 项城市| 山东省| 江阴市| 辽阳县| 馆陶县| 镇巴县| 黎川县| 彭水| 博爱县| 和政县| 光泽县| 大姚县| 鸡西市| 赤水市| 民乐县| 怀来县| 突泉县| 仙居县| 平度市| 九江县| 雷州市| 龙海市| 肇东市| 报价| 巨鹿县| 石渠县| 阆中市| 开化县| 济南市| 昌江| 峨眉山市| 襄城县| 体育| 宁明县| 阿荣旗| 台山市| 吴桥县| 永泰县| 湘阴县|