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

c++虛函數(shù)與虛函數(shù)表原理

 更新時間:2022年01月24日 16:57:26   作者:考拉愛睡覺鴨~  
這篇文章主要介紹了c++虛函數(shù)與虛函數(shù)表原理,用virtual?修飾的成員函數(shù)叫虛函數(shù),下面圍繞c++虛函數(shù)與虛函數(shù)得相關(guān)資料展開內(nèi)容,需要的朋友可以參考一下

1.什么是虛函數(shù)?

virtual 修飾的成員函數(shù)叫虛函數(shù)

小知識: 沒有虛構(gòu)造函數(shù)        不寫虛函數(shù),沒有默認(rèn)的虛函數(shù)

普通函數(shù)不影響類的內(nèi)存:

class MM
{
public:
    void print() 
 {
  cout << "普通函數(shù)"<< endl;    //普通函數(shù)不影響類的內(nèi)存<--->普通函數(shù)存在另一段內(nèi)存中
 }
protected:
};

void testVirtual()
{
 //C語言不允許存在空的結(jié)構(gòu)體
 cout << sizeof(MM) << endl;/*(沒有數(shù)據(jù)成員的)空的類或者結(jié)構(gòu)體 占用1字節(jié)  用1字節(jié)標(biāo)識當(dāng) 
                                   前內(nèi)存為結(jié)構(gòu)體內(nèi)存*/
}
int main() 
{
 testVirtual();
 return 0;
}
/*輸出*/

/* 1 */

2.虛函數(shù)會影響類的內(nèi)存

增加一個指針的內(nèi)存,32位操作系統(tǒng)多4個字節(jié) ,64位操作系統(tǒng)多8個字節(jié)

#include <iostream>
using namespace std;
class MM
{
public:
 virtual void print1() 
 {
  cout << "虛函數(shù)1"<< endl;
 }
 /*virtual void print2()
 {
  cout << "虛函數(shù)2" << endl;
 }     無論多少個虛函數(shù),增加的字節(jié)就是一個指針的字節(jié)--->多了一個虛函數(shù),還是4個字節(jié)*/
protected:
};
void testVirtual()
{
 
 cout << sizeof(MM) << endl;  
 
}
int main() 
{
 testVirtual();
 return 0;
}
/*輸出*/

/*  4  */

小知識:一旦有了數(shù)據(jù),標(biāo)識位就不需要存在了

class A
{
 int num;    //輸出4而不是5   (4+1)
};
class B
{
    //用1字節(jié)標(biāo)識當(dāng)前內(nèi)存為結(jié)構(gòu)體內(nèi)存
};
void testVirtual()
{

 cout << sizeof(A) << endl;
    cout << sizeof(B) << endl;
}
int main()
{
 testVirtual();
 return 0;
}

/*輸出*/

/*4
  1*/

3.了解虛函數(shù)表--->通過虛函數(shù)表的指針去訪問數(shù)據(jù)

就是一個指針存儲所有虛函數(shù)的首地址(虛函數(shù)函數(shù)名)<--->函數(shù)指針

只有指針可以操作一段內(nèi)存(4字節(jié))

/*無論多少個虛函數(shù),增加的字節(jié)就是一個指針的字節(jié)*/
所有的虛函數(shù)其實(shí)是 用一個函數(shù)指針去存儲的 ,把 這個函數(shù)指針指向的這一段內(nèi)存 稱為虛函數(shù)表

#include <iostream>
using namespace std;
class MM
{
public:
 virtual void print1() 
 {
  cout << "虛函數(shù)1"<< endl;
 } 
    virtual void print2() 
 {
  cout << "虛函數(shù)2"<< endl;
 } 
protected:
};
void testVirtual()
{
//虛函數(shù)表  
 MM mm;    //構(gòu)建一個對象
 int** vptr = (int** )&mm;    //定義一個二級指針&對象的地址  強(qiáng)轉(zhuǎn)類型
 typedef void(*PF)();         //函數(shù)指針定義別名
 PF func = (PF)vptr[0][0];    //把地址轉(zhuǎn)為函數(shù)指針,訪問第一個函數(shù)指針的地址

 func();  //通過虛函數(shù)表的函數(shù)指針調(diào)用第一個虛函數(shù)
 func = (PF)vptr[0][1];
 func();  //調(diào)用第二個虛函數(shù)
}
int main() 
{
 testVirtual();
 return 0;
}
/*輸出*/

/*虛函數(shù)1
  虛函數(shù)2*/

4.虛函數(shù)聲明

虛函數(shù)可以在類中聲明,在類外實(shí)現(xiàn),不再需要virtual修飾詞,只要類名限定就可以了

class MM
{
public:
 virtual void print3();
  
protected:
};
void MM::print3() {
 cout << "虛函數(shù)3" << endl;

}
int main()
{
 MM mm;
 mm.print3();
 return 0;
}
/*輸出*/

/*虛函數(shù)3*/

到此這篇關(guān)于c++虛函數(shù)與虛函數(shù)表原理的文章就介紹到這了,更多相關(guān)c++虛函數(shù)與虛函數(shù)表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VC實(shí)現(xiàn)的病毒專殺工具完整實(shí)例

    VC實(shí)現(xiàn)的病毒專殺工具完整實(shí)例

    這篇文章主要介紹了VC實(shí)現(xiàn)的病毒專殺工具完整實(shí)例,詳細(xì)講述了針對病毒的進(jìn)程終止、刪除文件及回復(fù)注冊表與啟動項等,同時介紹了與之相關(guān)的系統(tǒng)函數(shù),非常具有參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • C語言中嵌入Lua解釋器的方法詳解

    C語言中嵌入Lua解釋器的方法詳解

    Lua語言是一個輕量的腳本語言,可以用很少的資源運(yùn)行其解釋器,這篇文章主要為大家介紹了如何在C語言中嵌入Lua解釋器的方法,希望對大家有所幫助
    2024-05-05
  • C語言關(guān)于二叉樹中堆的創(chuàng)建和使用整理

    C語言關(guān)于二叉樹中堆的創(chuàng)建和使用整理

    大家好,這里是針對二叉樹中堆結(jié)構(gòu)的順序儲存,整理出來一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們在評論區(qū)指出,我們相互學(xué)習(xí),共同進(jìn)步
    2022-08-08
  • C語言程序的編譯與預(yù)處理詳解

    C語言程序的編譯與預(yù)處理詳解

    這篇文章主要介紹了C語言程序的編譯與預(yù)處理,包括介紹了C和C++混合編程的情況,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • C++ Boost Chrono實(shí)現(xiàn)計時碼表流程詳解

    C++ Boost Chrono實(shí)現(xiàn)計時碼表流程詳解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • 純C語言實(shí)現(xiàn)火車售票系統(tǒng)

    純C語言實(shí)現(xiàn)火車售票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了純C語言實(shí)現(xiàn)火車售票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • dev?c++的使用和調(diào)試方式

    dev?c++的使用和調(diào)試方式

    這篇文章主要介紹了dev?c++?的使用和調(diào)試方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 使用C語言實(shí)現(xiàn)交換整數(shù)的奇數(shù)位和偶數(shù)位

    使用C語言實(shí)現(xiàn)交換整數(shù)的奇數(shù)位和偶數(shù)位

    在C語言中,要交換一個整數(shù)的二進(jìn)制位中的奇數(shù)位和偶數(shù)位,重點(diǎn)需要理解位操作,當(dāng)我們談?wù)摱M(jìn)制位的奇數(shù)位和偶數(shù)位時,我們是指從右到左數(shù)的位置,本文給大家介紹了使用C語言代碼實(shí)現(xiàn)將一個整數(shù)的奇數(shù)位和偶數(shù)位交換,需要的朋友可以參考下
    2025-03-03
  • C++實(shí)現(xiàn)簡單貪吃蛇小游戲

    C++實(shí)現(xiàn)簡單貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語言實(shí)現(xiàn)歌曲信息管理系統(tǒng)

    C語言實(shí)現(xiàn)歌曲信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)歌曲信息管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

长治市| 锡林郭勒盟| 即墨市| 双流县| 伊宁县| 建德市| 宝清县| 徐闻县| 大英县| 德阳市| 临高县| 瑞安市| 铁岭县| 阜城县| 都匀市| 大足县| 黔南| 济宁市| 华安县| 鹤山市| 武邑县| 香河县| 芜湖县| 嘉兴市| 安义县| 玛曲县| 乐陵市| 合山市| 青州市| 博白县| 平远县| 江达县| 鄂托克旗| 河西区| 肥西县| 兴海县| 麻栗坡县| 安乡县| 建水县| 东莞市| 垦利县|