1. 程式人生 > >動態聯編與靜態聯編

動態聯編與靜態聯編

首先,聯編是指一個計算機程式的不同部分彼此關聯的過程。

靜態聯編是指聯編工作在編譯階段完成的,這種聯編過程是在程式執行之前完成的,又稱為早期聯編。要實現靜態聯編,在編譯階段就必須確定程式中的操作呼叫(如函式呼叫)與執行該操作程式碼間的關係,確定這種關係稱為束定,在編譯時的束定稱為靜態束定。靜態聯編對函式的選擇是基於指向物件的指標或者引用的型別。其優點是效率高,但靈活性差。 動態聯編是指聯編在程式執行時動態地進行,根據當時的情況來確定呼叫哪個同名函式,實際上是在執行時虛擬函式的實現。這種聯編又稱為晚期聯編,或動態束定。動態聯編對成員函式的選擇是基於物件的型別,針對不同的物件型別將做出不同的編譯結果。C++中一般情況下的聯編是靜態聯編,但是當涉及到多型性和虛擬函式時應該使用動態聯編。動態聯編的優點是靈活性強,但效率低。動態聯編規定,只能通過指向基類的指標或基類物件的引用來呼叫虛擬函式,其格式為: 指向基類的指標變數名- >虛擬函式名(實參表)或 基類物件的引用名. 虛擬函式名(實參表) 實現動態聯編需要同時滿足以下三個條件: ①必須把動態聯編的行為定義為類的虛擬函式。 ②類之間應滿足子型別關係,通常表現為一個類從另一個類公有派生而來。 ③必須先使用基類指標指向子型別的物件,然後直接或者間接使用基類指標呼叫虛擬函式。