小編給大家分享一下C++中虛函數(shù)內(nèi)存結(jié)構(gòu)是怎么樣的,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)專注于平安企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,成都做商城網(wǎng)站。平安網(wǎng)站建設(shè)公司,為平安等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)虛函數(shù)的內(nèi)存結(jié)構(gòu)虛函數(shù)的內(nèi)存結(jié)構(gòu)
一、 基本概念
C++中的虛函數(shù)的作用主要是實(shí)現(xiàn)了多態(tài)的機(jī)制。
關(guān)于多態(tài),簡(jiǎn)而言之就是用父類型別的指針指向其子類的實(shí)例,然后通過父類的指針調(diào)用實(shí)際子類的成員函數(shù)。這種技術(shù)可以讓父類的指針有“多種形態(tài)”,這是一種泛型技術(shù)。
所謂泛型技術(shù),說白了就是試圖使用不變的代碼來實(shí)現(xiàn)可變的算法。比如:模板技術(shù),RTTI技術(shù),虛函數(shù)技術(shù),要么是試圖做到在編譯時(shí)決議,要么試圖做到運(yùn)行時(shí)決議。
二、 虛函數(shù)的定義與派生類中的重定義
class 類名
{
public:
virtual 成員函數(shù)說明;
}
class 類名:訪問修飾符 基類名
{
public:
virtual 成員函數(shù)說明;
}
三、 虛函數(shù)在內(nèi)存中的結(jié)構(gòu)
1.我們先看一個(gè)例子
#include <iostream>
using namespace std;
class A
{
public:
virtual void fun0() { cout << "A::fun0" << endl; }
};
int main(void)
{
A a;
cout << "size
of A = " << sizeof(a) << endl;
return 0;
}
結(jié)果:size of A = 4
2.如果再添加一個(gè)虛函數(shù)
virtual void fun1() { cout << "A::fun1" << endl; }
得到相同的結(jié)果。如果去掉函數(shù)前面的virtual修飾符 結(jié)果:size of A = 1
3.在看下面的結(jié)果
#include <iostream>
using namespace std;
class A
{
public:
virtual void fun0() { cout << "A::fun0" << endl; }
int a;
int b;
};
int main(void)
{
A a;
cout << "size
of A = " << sizeof(a) << endl;
return 0;
}
結(jié)果:size of A = 12
在 lip32 平臺(tái)下指針在內(nèi)存中占4個(gè)字節(jié),虛函數(shù)在一個(gè)虛函數(shù)表(VTABLE)中保存函數(shù)地址。
在看下面例子:
#include <iostream>
using namespace std;
class A
{
public:
virtual void fun0() { cout << "A::fun0" << endl; }
virtual void fun1() { cout << "A::fun1" << endl; }
};
int main(void)
{
A a;
cout << "size
of A = " << sizeof(a) << endl;
return 0;
}
結(jié)果:
size of A = 4
4.我們?cè)賮砜纯蠢^承中虛函數(shù)的內(nèi)存結(jié)構(gòu)
先看下面的例子
#include <iostream>
using namespace std;
class A
{
public:
virtual void fun0() { cout << "A::fun0" << endl; }
};
class B
{
public:
virtual void fun0() { cout << "B::fun0" << endl; }
};
class C
{
public:
virtual void fun0() { cout << "C::fun0" << endl; }
};
class D : public A, public B, public C
{};
int main(void)
{
D d;
cout << "size
of D = " << sizeof(d) << endl;
return 0;
}
結(jié)果:size is = 12
以上是“C++中虛函數(shù)內(nèi)存結(jié)構(gòu)是怎么樣的”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)題目:C++中虛函數(shù)內(nèi)存結(jié)構(gòu)是怎么樣的-創(chuàng)新互聯(lián)
文章鏈接:http://www.chinadenli.net/article8/dhsdop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站排名、網(wǎng)站改版、網(wǎng)站策劃、移動(dòng)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容