早綁定(early binding)是指在實(shí)例化對(duì)象之前定義它的屬性和方法,這樣編譯器或解釋程序就能夠提前轉(zhuǎn)換機(jī)器代碼。
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的臺(tái)江網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!晚綁定(late binding)指的是編譯器或解釋程序在運(yùn)行前,不知道對(duì)象的類型。使用晚綁定,無需檢查對(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)通過基類指針做虛函數(shù)調(diào)用時(shí),編譯器靜態(tài)的插入能取得這個(gè)VPTR并在VTAVLE表中查找函數(shù)地址的代碼,這樣就會(huì)引起晚捆綁的發(fā)生。
#define _CRT_SECURE_NO_WARNINGS #includeusing 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; }
由于類Onevirtual和類Twovirtual的大小沒有發(fā)生改變,所以可以推出上述的結(jié)論。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。