在c++中,聯編是指乙個電腦程式的不同部分彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。
1. 靜態聯編
靜態聯編是指聯編工作在編譯階段完成的,這種聯編過程是在程式執行之前完成的,又稱為早期聯編。要實現靜態聯編,在編譯階段就必須確定程式中的操作呼叫(如函式呼叫)與執行該操作**間的關係,確定這種關係稱為束定,在編譯時的束定稱為靜態束定。靜態聯編對函式的選擇是基於指向物件的指標或者引用的型別。其優點是效率高,但靈活性差。
例1:靜態聯編
#include
"iostream.h"
classa}
;classb:publica};
void main()
該程式的執行結果為:a a
從例1程式的執行結果可以看出,通過物件指標進行的普通成員函式的呼叫,僅僅與指標的型別有關,而與此刻指標正指向什麼物件無關。要想實現當指標指向不同物件時執行不同的操作,就必須將基類中相應的成員函式定義為虛函式,進行動態聯編。
2. 動態聯編
動態聯編是指聯編在程式執行時動態地進行,根據當時的情況來確定呼叫哪個同名函式,實際上是在執行時虛函式的實現。這種聯編又稱為晚期聯編,或動態束定。動態聯編對成員函式的選擇是基於物件的型別,針對不同的物件型別將做出不同的編譯結果。c++中一般情況下的聯編是靜態聯編,但是當涉及到多型性和虛函式時應該使用動態聯編。動態聯編的優點是靈活性強,但效率低。
動態聯編規定,只能通過指向基類的指標或基類物件的引用來呼叫虛函式,其格式為:
指向基類的指標變數名->虛函式名(實參表)
或 基類物件的引用名.虛函式名(實參表)
實現動態聯編需要同時滿足以下三個條件:
① 必須把動態聯編的行為定義為類的虛函式。
② 類之間應滿足子型別關係,通常表現為乙個類從另乙個類公有派生而來。
③ 必須先使用基類指標指向子型別的物件,然後直接或者間接使用基類指標呼叫虛函式。
例2:動態聯編
#include
"iostream.h"
classa};
classb:publica };
void
main()
該程式的執行結果為:a b
從例2程式的執行結果可以看出,將基類a中的函式f定義為虛函式後,當指標指向不同物件時執行了不同的操作,實現了動態聯編。
虛函式是實現多型的基礎,是實現動態聯編的必要條件之一。動態聯編要靠虛函式來實現,虛函式要靠動態聯編的支援。兩者相輔相成,缺一不可。
c 動態聯編與靜態聯編
摘要 本文闡述了靜態聯編和動態聯編的概念和區別,通過具體例項分析了實現動態聯編的條件,指出了虛函式是實現動態聯編的基礎。在c 中,聯編是指乙個電腦程式的不同部分彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。1.靜態聯編 靜態聯編是指聯編工作在編譯階段完成的,...
C 動態聯編與靜態聯編
加入自己一些理解.在c 中,聯編是指乙個電腦程式的不同部分彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。1.靜態聯編 靜態聯編是指聯編工作在編譯階段完成的,這種聯編過程是在程式執行之前完成的,又稱為早期聯編。要實現靜態聯編,在編譯階段就必須確定程式中的操作呼...
C 靜態聯編與動態聯編
目錄 基本概念 舉個栗子 聯編 就是將模組或者函式合併在一起生成可執行 的處理過程 函式呼叫 按照聯編所進行的階段不同,可分為兩種不同的聯編方式 靜態聯編和動態聯編。函式呼叫和實現的過程 c 只有用到多型才會用到動態連編 程式設計師是看不出來的,只是系統內部的處理 程式在編譯的時候,就知道某個類呼叫...