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

溫馨提示×

溫馨提示×

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

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

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

通渭县| 新郑市| 科技| 瓦房店市| 高安市| 保德县| 重庆市| 徐州市| 怀来县| 剑阁县| 牡丹江市| 玛多县| 利川市| 仙游县| 遵化市| 施秉县| 仙居县| 道真| 青海省| 灵武市| 和田市| 孝感市| 汽车| 丹江口市| 佛冈县| 和平区| 抚松县| 阜阳市| 鸡泽县| 贵港市| 景谷| 扶绥县| 班玛县| 那曲县| 武威市| 阿拉尔市| 尼勒克县| 萨迦县| 衡水市| 夏河县| 六盘水市|