複製鏈接
請複製以下鏈接發送給好友

聯編

鎖定
聯編是指一個計算機程序自身彼此關聯(使一個源程序經過編譯、連接,成為一個可執行程序)的過程,在這個聯編過程中,需要確定程序中的操作調用(函數調用)與執行該操作(函數)的代碼段之間的映射關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。
中文名
聯編
性    質
編輯過程
分    類
靜態聯編和動態聯編

目錄

聯編靜態聯編

聯編定義

靜態聯編又稱靜態束定、早期聯編、前期聯編。
靜態聯編是指聯編工作是在程序編譯連接階段進行的,靜態聯編又稱早期聯編,因為這種聯編是在程序開始運行之前完成的。在程序編譯階段進行的這種聯編又稱靜態束定,在編譯時就解決了程序中的操作調用與執行該操作代碼間的關係,確定這種關係又被稱為束定,編譯時束定又稱為靜態束定。

聯編特點

調用速度快,效率高。

聯編例子

//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
這就是靜態聯編,編譯器在程序運行前就知道什麼函數做什麼事。

聯編動態聯編

聯編定義

動態聯編又稱動態關聯、動態束定、後期聯編、晚期聯編。 [1] 
動態聯編是指編譯程序在編譯階段並不能確切地知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,為此要確切地知道將要調用的函數,要求聯編工作在程序運行時進行,這種在程序運行時進行的聯編工作被稱為動態聯編。C++規定:動態聯編是在虛函數的支持下實現的。
動態聯編必須包括以下方面:
1、成員函數必須聲明為virtual
2、如果基類中聲明瞭為虛函數,則派生類中不必再聲明。
調用方式:
通過對象的指針或引用調用成員函數,或通過成員函數調用,反之就無法實現動態聯編。

聯編特點

靈活,問題抽象性和問題的易維護性。

聯編例子

#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;
}
這就是動態聯編,編譯器在程序運行時才知道這個函數的具體作用。
參考資料