靜態聯編和動態聯編

2021-07-05 18:14:36 字數 1921 閱讀 5228

聯編就是將模組或者函式合併在一起生成可執行**的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編

靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯編也叫早繫結,在編譯階段就必須了解所有的函式或模組執行所需要檢測的資訊,它對函式的選擇是基於指向物件的指標(或者引用)的型別,c語言中,所有的聯編都是靜態聯編,據我所知道的,任何一種編譯器都支援靜態聯編(廢話)。

動態聯編是指在程式執行的時候才將函式實現和函式呼叫關聯,因此也叫執行時繫結或者晚繫結,動態聯編對函式的選擇不是基於指標或者引用,而是基於物件型別,不同的物件型別將做出不同的編譯結果。c++中一般情況下聯編也是靜態聯編,但是一旦涉及到多型和虛函式就必須要使用動態聯編!!!!!了。下面將介紹一下多型。

多型:字面的含義是具有多種形式或形態。c++多型有兩種形式,動態多型和靜態多型;動態多型是指一般的多型,是通過類繼承和虛函式機制!!!實現的多型;靜態多型是通過模板來實現,因為這種多型是在編譯時而非執行時,所以稱為靜態多型。

動態多型例子:

#include using namespace std;

/***shape

*/class cshape

virtual ~cshape(){}

virtual void draw() = 0;

};/**

*point

*/class cpoint : public cshape

~cpoint(){}

void draw()

~cline(){}

void draw()

結果:

hello! i am point!

hello! i am line!

process returned 0 (0x0) execution time : 0.273 s

press any key to continue.

順便在這裡也提供乙個靜態多型的例子,在上面例子的基礎之上新增模板函式:

#include using namespace std;

/***shape

*/class cshape

virtual ~cshape(){}

virtual void draw() = 0;

};/**

*point

*/class cpoint : public cshape

~cpoint(){}

void draw()

~cline(){}

void draw()

int main()

結果:

hello! i am point!

hello! i am line!

process returned 0 (0x0) execution time : 0.165 s

press any key to continue.

在程式編譯main函式的時候,編譯器就已經指定了drawshape函式裡面的draw要呼叫那個實現了,這就是靜態多型,在編譯時就已經知道了要呼叫的函式

靜態聯編和動態聯編

聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...

靜態聯編和動態聯編

聯編就是將模組或者函式合併在一起生成可執行 的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯...

靜態聯編和動態聯編

聯編 將源 中的函式呼叫解釋為執行特定 塊稱為函式名聯編。靜態聯編 在編譯過程中進行聯編。動態聯編 編譯器生成能在程式執行期間選擇正確的虛方法的 稱為動態聯編。因為只有在執行期間,才知道函式選那種型別的物件。將派生類引用或指標轉換為基類引用或指標成為向上強制轉換,派生類繼承了基類物件的所有資料成員和...