動態聯編和靜態聯編

2021-07-22 07:44:36 字數 1303 閱讀 5316

聯編概念

聯編是指電腦程式自身彼此關聯的過程。通常指把乙個被呼叫的函式的**連線到要執行的程式的過程,實際上就是將乙個識別符號與乙個儲存位址聯絡起來的過程。簡單的說就是將帶呼叫程式的函式的**連線到該程式上。

靜態聯編

動態聯編

在編譯階段並不知道確切要呼叫什麼函式,只有在程式執行時才能確定要呼叫的函式。為此,聯編就要求在程式執行時進行。這種在程式執行時進行聯編的工作稱為動態聯編。

注:如果乙個函式被宣告為虛函式,就意味著這個函式可以在派生類中有不同的實現。當使用這個成員函式作為指標或者引用所標識的物件時,對該函式採取動態聯編方式。

特點:速度較慢,效率高,靈活性較強。

深入理解聯編的過程

先看如下的**:

class base

;class derive :public base

;void func (base& b)//注意這裡就要區分動態和靜態聯編過程了

void test1 ()

先說這裡存在的問題再來解釋聯編過程

問題:

在 test函式裡面定義了兩個物件在,func(b1)這個函式,沒什麼說的它將呼叫所有基類的成員函式。

在func(d1)這個函式裡面,它的func1呼叫的是子類drive的func1,因為這個函式宣告為virtual,所以它呼叫過程是動態聯編,所以它被關聯到drive : : func1( ) 這個函式。接下來呼叫display函式時,它是靜態聯編,因此要被關聯到基類的成員函式裡面。

聯編過程

可以看到在呼叫display函式的時候直接就確定了函式位址,而在呼叫func1時(這是個虛函式),需要先去虛表裡面找取這個函式的位址,然後找到這個函式,再去確定這個函式。因此,當傳給他子類的物件時,它找到的是子類虛表裡面的函式。

對於上述動態聯編彙編去確定取得函式解釋如下圖

總結

靜態聯編就是過載,因為是在編譯期決議確定,所以稱為靜態聯編。

動態多聯編就是通過繼承重寫基類的虛函式實現的多型,因為是在執行時決議確定,所以稱為動態多型。

動態聯編和靜態聯編

動態聯編和靜態聯編 一 靜態聯編 定義在編譯時所進行的這種聯編又稱靜態束定,在編譯時就解決了程式中的操作呼叫與執行該操作 間的關係。注意 靜態聯編由可訪問屬性和預設值確定 二 動態聯編 定義編譯程式在編譯階段並不能確切知道將要呼叫的函式,只有在程式執行時才能確定將要呼叫的函式,為此要確切知道該呼叫的...

c 動態聯編和靜態聯編

將乙個呼叫函式者聯結上正確的被呼叫函式,這過程叫做函式聯編。c 中的聯編分兩種,分為靜態聯編和動態聯編。為加virtual時是靜態聯編 加入virtual是動態聯編。只有在使用指標或者引用時,才能實現在執行時的動態聯編。include include using namespace std clas...

C 中的動態聯編和靜態聯編

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