聯編就是將模組或者函式合併在一起生成可執行**的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。
靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯編也叫早繫結,在編譯階段就必須了解所有的函式或模組執行所需要檢測的資訊,它對函式的選擇是基於指向物件的指標(或者引用)的型別,c語言中,所有的聯編都是靜態聯編,據我所知道的,任何一種編譯器都支援靜態聯編(廢話)。
動態聯編是指在程式執行的時候才將函式實現和函式呼叫關聯,因此也叫執行時繫結或者晚繫結,動態聯編對函式的選擇不是基於指標或者引用,而是基於物件型別,不同的物件型別將做出不同的編譯結果。c++中一般情況下聯編也是靜態聯編,但是一旦涉及到多型和虛函式就必須要使用動態聯編了。下面將介紹一下多型。
多型:字面的含義是具有多種形式或形態。c++多型有兩種形式,動態多型和靜態多型;動態多型是指一般的多型,是通過類繼承和虛函式機制實現的多型;靜態多型是通過模板來實現,因為這種多型實在編譯時而非執行時,所以稱為靜態多型。
動態多型例子:
#include
#include
/**
*shape
*/class cshape
virtual ~cshape(){}
virtual void draw() = 0;
};/**
*point
*/class cpoint : public cshape
~cpoint(){}
void draw()
};/**
*line
*/class cline : public cshape
~cline(){}
void draw()
};void main()
大家可以考慮一下它的輸出結果,如果實在不知道,那就麻煩你執行一下它吧!
順便在這裡也提供乙個靜態多型的例子:
在上面例子的基礎之上新增模板函式:
template
void drawshape(t* t)
修改main函式為如下:
void main()
在程式編譯main函式的時候,編譯器就已經指定了drawshape函式裡面的draw要呼叫那個實現了,這就是靜態多型,在編譯時就已經知道了要呼叫的函式。
全文完!
C 靜態聯編和動態聯編
聯編就是將模組或者函式合併在一起生成可執行 的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯...
靜態聯編和動態聯編
聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...
靜態聯編和動態聯編
聯編就是將模組或者函式合併在一起生成可執行 的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯...