『壹』 動態聯編是在運行時選定調用的成員函數的
是的,你可以使用靜態編譯和動態編譯後反匯編比較一下!
『貳』 淺談靜態聯編和動態聯編的區別和實現動態聯編的
聯編是指一個程序自身彼此關聯的過程。按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。
靜態聯編又稱靜態綁定,指在調用同名函數(即重載函數)時編譯器將根據調用時所使用的實參在編譯時就確定下來應該調用的函數實現。它是在程序編譯連接階段進行聯編的,這種聯編又稱為早期聯編,這是因為這種聯編工作是在程序運行之前完成的。它的優點是速度快,效率高,但靈活性不夠。
編譯時所進行的聯編又稱為靜態束定。束定是指確定所調用的函數與執行該函數代碼之間的關系。
動態聯編也稱動態綁定,是指在程序運行時,根據當時的情況來確定調用的同名函數的實現,實際上就是在運行時選擇虛函數的實現。這種聯編又稱為晚期聯編或動態(束定。實現條件:①要有繼承性且要求創建子類型關系;)②要有虛函數;③通過基類的對象指針或引用訪問虛函數。繼承是動態聯編的基礎,虛函數是動態聯編的關鍵,虛函數經過派生之後,在類族中就可以實現運行過程中的多態。動態聯編要求在運行時解決程序中的函數調用與執行該函數代碼間的關系,調用虛函數的對象是在運行時確定的。對於同一個對象的引用,採用不同的聯編方式將會被聯編到不同類的對象上。即不同聯編可以選擇不同的實現,這便是多態性。它的優點是靈活性強,但效率較低。
『叄』 聯編的動態聯編
動態聯編又稱動態關聯、動態束定、後期聯編、晚期聯編。
動態聯編是指編譯程序在編譯階段並不能確切地知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,為此要確切地知道將要調用的函數,要求聯編工作在程序運行時進行,這種在程序運行時進行的聯編工作被稱為動態聯編。C++規定:動態聯編是在虛函數的支持下實現的。
動態聯編必須包括以下方面:
1、成員函數必須聲明為virtual
2、如果基類中聲明了為虛函數,則派生類中不必再聲明。
調用方式:
通過對象的指針或引用調用成員函數,或通過成員函數調用,反之就無法實現動態聯編。 #include<iostream>#include<string>usingnamespacestd;classCBuilding{//定義建築類stringname;//定義名稱public:voidset(stringstrName);//修改名稱virtualvoiddisplay()//顯示信息,這里是內聯函數,而且聲明為虛函數{cout<<建築是<<name<<
;}};//建築類定義完畢voidCBuilding::set(stringstrName){//修改名稱方法的實現name=strName;}classCBridge:publicCBuilding{//通過繼承來定義橋類floatlength;//定義長度public:voidsetLength(floatl=0.0){length=l;}//設置長度voiddisplay(){CBuilding::display();//調用基類方法顯示名稱cout<<其長度是<<length<<米。
;//顯示長度信息}};//橋類定義完畢voidmain(){CBuildingbuilding;//創建建築對象CBridgebridge;//創建橋對象building.set(中國古代建築);//設置名稱building.display();//顯示信息bridge.set(中國趙州橋);//設置橋的名稱bridge.setLength(static_cast<float>(60.40));//修改橋的長度bridge.display();//顯示橋的信息return;}這就是動態聯編,編譯器在程序運行時才知道這個函數的具體作用。