欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

小知識: 沒有虛構(gòu)造函數(shù)        不寫虛函數(shù),沒有默認的虛函數(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é)標識當 
                                   前內(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ù),標識位就不需要存在了

class A
{
 int num;    //輸出4而不是5   (4+1)
};
class B
{
    //用1字節(jié)標識當前內(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ù)指針指向的這一段內(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;    //定義一個二級指針&對象的地址  強轉(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ù)可以在類中聲明,在類外實現(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*/

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

相關文章

  • 淺談C++中replace()方法

    淺談C++中replace()方法

    C++編程語言中的string應用方式多樣化,每一種應用方式都能幫助我們提實現(xiàn)特定的功能需求。在這里我們將會為大家詳細介紹一下其中一個比較重要的用法,有關C++ replace()函數(shù)的應用方式,需要的朋友可以參考下
    2015-11-11
  • Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實例

    Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實例

    這篇文章主要介紹了Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實例,本文代碼中含大量注釋講解了CCControlSwitch控件類的使用,需要的朋友可以參考下
    2014-09-09
  • C++?pimpl機制詳細講解

    C++?pimpl機制詳細講解

    PIMPL?是?C++?中的一個編程技巧,意思為指向?qū)崿F(xiàn)的指針。具體操作是把類的實現(xiàn)細節(jié)放到一個單獨的類中,并用一個指針進行訪問
    2022-08-08
  • Socket通信原理和實踐

    Socket通信原理和實踐

    本文詳細講解了Socket通信原理和實踐,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • 詳解C語言實現(xiàn)推箱子的基本功能

    詳解C語言實現(xiàn)推箱子的基本功能

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)推箱子的基本功能的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++ 實現(xiàn)漢諾塔的實例詳解

    C++ 實現(xiàn)漢諾塔的實例詳解

    這篇文章主要介紹了C++ 實現(xiàn)漢諾塔的實例詳解的相關資料,這里主要說明C++中數(shù)據(jù)結(jié)構(gòu)的遞歸的應用,需要的朋友可以參考下
    2017-08-08
  • 詳解c++優(yōu)先隊列priority_queue的用法

    詳解c++優(yōu)先隊列priority_queue的用法

    本文詳細講解了c++優(yōu)先隊列priority_queue的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 一文詳解C語言中的switch語句和while循環(huán)

    一文詳解C語言中的switch語句和while循環(huán)

    這篇文章主要給大家詳細介紹了C語言中的switch語句和while循環(huán),文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • Qt實現(xiàn)高精度定時器

    Qt實現(xiàn)高精度定時器

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)高精度定時器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言學生成績管理系統(tǒng)源碼

    C語言學生成績管理系統(tǒng)源碼

    這篇文章主要為大家詳細介紹了C語言學生成績管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論