聯編是指一個電腦程式自身彼此關聯(使一個源程式經過編譯、連線,成為一個可執行程式)的過程,在這個聯編過程中,需要確定程式中的操作調用(函式調用)與執行該操作(函式)的代碼段之間的映射關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。
基本介紹
- 中文名:聯編
- 外文名:lianbian
- 性質:編輯過程
- 分類:靜態聯編和動態聯編
靜態聯編,定義:,特點:,例子:,動態聯編,定義:,特點:,例子:,
靜態聯編
定義:
靜態聯編又稱靜態束定、早期聯編、前期聯編。
靜態聯編是指聯編工作是在程式編譯連線階段進行的,靜態聯編又稱早期聯編,因為這種聯編是在程式開始運行之前完成的。在程式編譯階段進行的這種聯編又稱靜態束定,在編譯時就解決了程式中的操作調用與執行該操作代碼間的關係,確定這種關係又被稱為束定,編譯時束定又稱為靜態束定。
特點:
調用速度快,效率高。
例子:
//C++#include<iostream>using namespace std;class point{ private: float x,y; public: void setPoint(float i,float j){ x=i; y=j; } float area(){return 0;}};const float pi=3.14159;class circle:public point{ private: float radius; public: void setRadius(float r){radius=r;} float area(){return pi*radius*radius;}};int main(){ float a; point p; a=p.area(); //調用point類的成員函式 cout<<"the area of the point p is "<<a<<endl; circle c; c.setRadius(2.5); a=c.area(); //調用circle類的成員函式 cout<<"the area of the circle c is "<<a<<endl;}
程式結果為:
the area of the point p is 0
the area of the circle c is 19.634937
這就是靜態聯編,編譯器在程式運行前就知道什麼函式做什麼事。
動態聯編
定義:
動態聯編又稱動態關聯、動態束定、後期聯編、晚期聯編。
動態聯編是指編譯程式在編譯階段並不能確切地知道將要調用的函式,只有在程式執行時才能確定將要調用的函式,為此要確切地知道將要調用的函式,要求聯編工作在程式運行時進行,這種在程式運行時進行的聯編工作被稱為動態聯編。C++規定:動態聯編是在虛函式的支持下實現的。
動態聯編必須包括以下方面:
1、成員函式必須聲明為virtual
調用方式:
特點:
靈活,問題抽象性和問題的易維護性。
例子:
#include<iostream>#include<string>usingnamespacestd;classCBuilding{//定義建築類stringname;//定義名稱public:voidset(stringstrName);//修改名稱virtualvoiddisplay()//顯示信息,這裡是內聯函式,而且聲明為虛函式{cout<<"建築是"<<name<<"\n";}};//建築類定義完畢voidCBuilding::set(stringstrName){//修改名稱方法的實現name=strName;}classCBridge:publicCBuilding{//通過繼承來定義橋類floatlength;//定義長度public:voidsetLength(floatl=0.0){length=l;}//設定長度voiddisplay(){CBuilding::display();//調用基類方法顯示名稱cout<<"其長度是"<<length<<"米。\n";//顯示長度信息}};//橋類定義完畢voidmain(){CBuildingbuilding;//創建建築對象CBridgebridge;//創建橋對象building.set("中國古代建築");//設定名稱building.display();//顯示信息bridge.set("中國趙州橋");//設定橋的名稱bridge.setLength(static_cast<float>(60.40));//修改橋的長度bridge.display();//顯示橋的信息return;}這就是動態聯編,編譯器在程式運行時才知道這個函式的具體作用。