您好,登錄后才能下訂單哦!
早綁定(early binding)是指在實例化對象之前定義它的屬性和方法,這樣編譯器或解釋程序就能夠提前轉換機器代碼。
晚綁定(late binding)指的是編譯器或解釋程序在運行前,不知道對象的類型。使用晚綁定,無需檢查對象的類型,只需檢查對象是否支持屬性和方法即可。
早綁定的優點是:
(1) 編譯效率 高
(2) 有代碼提示
(3) 編譯時類型檢查
晚綁定的優點是:
(1) 不用申明類型
(2) 對象類型可以隨時更改
virtual關鍵字可以告訴編譯器實行的是晚捆綁(虛函數)。
為了實現晚捆綁,典型的編譯器對每個包含虛函數的類將創建一個表(VTABLE),在VTABLE中放著特定類的虛函數地址。在每個帶有虛函數的類中,編譯器會放置一個指針VPTR,指向這個對象的VTABLE。當通過基類指針做虛函數調用時,編譯器靜態的插入能取得這個VPTR并在VTAVLE表中查找函數地址的代碼,這樣就會引起晚捆綁的發生。
#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; }
由于類Onevirtual和類Twovirtual的大小沒有發生改變,所以可以推出上述的結論。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。