c++晚捆綁的實(shí)現(xiàn)機(jī)制

 早綁定(early binding)是指在實(shí)例化對(duì)象之前定義它的屬性和方法,這樣編譯器或解釋程序就能夠提前轉(zhuǎn)換機(jī)器代碼。

創(chuàng)新互聯(lián)擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊(duì),在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕10年,專業(yè)且經(jīng)驗(yàn)豐富。10年網(wǎng)站優(yōu)化營(yíng)銷經(jīng)驗(yàn),我們已為1000多家中小企業(yè)提供了網(wǎng)站制作、成都網(wǎng)站建設(shè)解決方案,按需網(wǎng)站制作,設(shè)計(jì)滿意,售后服務(wù)無(wú)憂。所有客戶皆提供一年免費(fèi)網(wǎng)站維護(hù)!

      晚綁定(late binding)指的是編譯器或解釋程序在運(yùn)行前,不知道對(duì)象的類型。使用晚綁定,無(wú)需檢查對(duì)象的類型,只需檢查對(duì)象是否支持屬性和方法即可。

   早綁定的優(yōu)點(diǎn)是:
          (1)  編譯效率 高
          (2)  有代碼提示
          (3)  編譯時(shí)類型檢查 
   晚綁定的優(yōu)點(diǎn)是:
          (1)  不用申明類型 
          (2)  對(duì)象類型可以隨時(shí)更改

        virtual關(guān)鍵字可以告訴編譯器實(shí)行的是晚捆綁(虛函數(shù))。

       為了實(shí)現(xiàn)晚捆綁,典型的編譯器對(duì)每個(gè)包含虛函數(shù)的類將創(chuàng)建一個(gè)表(VTABLE),在VTABLE中放著特定類的虛函數(shù)地址。在每個(gè)帶有虛函數(shù)的類中,編譯器會(huì)放置一個(gè)指針VPTR,指向這個(gè)對(duì)象的VTABLE。當(dāng)通過(guò)基類指針做虛函數(shù)調(diào)用時(shí),編譯器靜態(tài)的插入能取得這個(gè)VPTR并在VTAVLE表中查找函數(shù)地址的代碼,這樣就會(huì)引起晚捆綁的發(fā)生。

#define  _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class NoVirtual
{
public:
void fun()
{}
int ret()
{}
private:
int a;
};
class OneVirtual
{
public:
virtual void fun()
{}
int ret()
{}
private:
int a;
};
class TwoVirtual
{
public:
virtual void fun()
{}
virtual int ret()
{}
private:
int a;
};
void test()
{
cout << "sizeof(int):" << sizeof(int) << endl;
cout << "sizeof(NoVirtual):" << sizeof(NoVirtual) << endl;
cout << "sizeof(OneVirtual):" << sizeof(OneVirtual) << endl;
cout << "sizeof(TwoVirtual):" << sizeof(TwoVirtual) << endl;
}
int main()
{
test();
system("pause");
return 0;
}

c++晚捆綁的實(shí)現(xiàn)機(jī)制

由于類Onevirtual和類Twovirtual的大小沒(méi)有發(fā)生改變,所以可以推出上述的結(jié)論。

當(dāng)前文章:c++晚捆綁的實(shí)現(xiàn)機(jī)制
本文路徑:http://bm7419.com/article46/iihphg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、靜態(tài)網(wǎng)站、電子商務(wù)、品牌網(wǎng)站制作網(wǎng)站內(nèi)鏈、網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管