最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)述C++中虛擬函數(shù)的內(nèi)存分配機(jī)制

 更新時(shí)間:2020年08月14日 11:56:06   作者:ccf19881030  
這篇文章主要介紹了簡(jiǎn)述C++中虛擬函數(shù)的內(nèi)存分配機(jī)制,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下

因?yàn)樘摂M函數(shù)的地址翻譯取決于對(duì)象的內(nèi)存地址,而不取決于數(shù)據(jù)類型(編譯器對(duì)函數(shù)

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

就要生成一張?zhí)摵瘮?shù)表,即vtable。而在類的對(duì)象地址空間中存儲(chǔ)一個(gè)該虛函數(shù)表的入口,

占4個(gè)字節(jié),這個(gè)入口地址是在構(gòu)造對(duì)象是由編譯器寫入的。

有如下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;
}

程序運(yùn)行結(jié)果為:

1

2

這里涉及到虛函數(shù)的工作機(jī)制,由于對(duì)象的內(nèi)存空間中包含了虛函數(shù)表的入口,

編譯器能夠由這個(gè)入口找到適當(dāng)?shù)奶摵瘮?shù),這個(gè)函數(shù)的地址不再由數(shù)據(jù)類型決定了。

語(yǔ)句pMem = &b;使pMem指向?qū)ο骲的內(nèi)存空間,調(diào)用pMem->funOver()時(shí),

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

以上就是簡(jiǎn)述C++中虛擬函數(shù)的內(nèi)存分配機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于c++虛擬函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼

    C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易連連看游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易連連看游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易連連看游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例

    C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例解析,代理模式可以被歸類為結(jié)構(gòu)型的設(shè)計(jì)模式,代理模式主張為對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問,需要的朋友可以參考下
    2016-03-03
  • C語(yǔ)言 深入講解條件編譯的用處

    C語(yǔ)言 深入講解條件編譯的用處

    C語(yǔ)言提供了條件編譯的語(yǔ)法,就是在編譯源碼的時(shí)候,可以選擇性地編譯指定的代碼。例如我們開發(fā)一個(gè)兼容windows系統(tǒng)和linux系統(tǒng)運(yùn)行的項(xiàng)目,那么,一些與操作系統(tǒng)密切相關(guān)的代碼,就需要進(jìn)行選擇性編譯
    2022-04-04
  • 字符串拷貝函數(shù)memcpy和strncpy以及snprintf 的性能比較

    字符串拷貝函數(shù)memcpy和strncpy以及snprintf 的性能比較

    以下是對(duì)字符串拷貝函數(shù)memcpy和strncpy以及snprintf它們之間的性能進(jìn)行了比較,需要的朋友可以過來參考下
    2013-07-07
  • c語(yǔ)言實(shí)現(xiàn)把文件中數(shù)據(jù)讀取并存到數(shù)組中

    c語(yǔ)言實(shí)現(xiàn)把文件中數(shù)據(jù)讀取并存到數(shù)組中

    下面小編就為大家?guī)硪黄猚語(yǔ)言實(shí)現(xiàn)把文件中數(shù)據(jù)讀取并存到數(shù)組中。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C語(yǔ)言版的三子棋游戲

    C語(yǔ)言版的三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版的三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 一篇文章帶你了解C++面向?qū)ο缶幊?-繼承

    一篇文章帶你了解C++面向?qū)ο缶幊?-繼承

    這篇文章主要介紹了解析C++面對(duì)象編程--繼承的運(yùn)用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-08-08
  • C++ OpenCV實(shí)戰(zhàn)之手勢(shì)識(shí)別

    C++ OpenCV實(shí)戰(zhàn)之手勢(shì)識(shí)別

    這篇文章主要介紹了如何利用C++?OpenCV實(shí)現(xiàn)手勢(shì)識(shí)別,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定幫助,感興趣的小伙伴可以了解一下
    2022-04-04
  • C++中用指向數(shù)組的指針作函數(shù)參數(shù)

    C++中用指向數(shù)組的指針作函數(shù)參數(shù)

    多維數(shù)組名作為函數(shù)參數(shù)傳遞:在二維數(shù)組中,數(shù)組名a是指向首行a[0]的指針,也就是說a=&a[0]; a[0]是指向首元素a[0][0]的指針,也就是說a[0]=&a[0][0]
    2013-10-10

最新評(píng)論

宁乡县| 通渭县| 五峰| 津市市| 大安市| 衡阳县| 广河县| 石林| 科技| 五大连池市| 桂平市| 邛崃市| 平遥县| 大石桥市| 将乐县| 溆浦县| 彭泽县| 肇源县| 博湖县| 云南省| 梅河口市| 涞水县| 宜兰县| 蒲江县| 贵溪市| 玉门市| 黎平县| 连江县| 两当县| 高邮市| 攀枝花市| 报价| 上高县| 社会| 阿鲁科尔沁旗| 佳木斯市| 丹巴县| 丹阳市| 西畴县| 正定县| 太和县|