C 動態繫結的實現

2021-08-16 09:24:42 字數 744 閱讀 1627

虛函式與純虛函式

純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求所有的派生類都要定義自己的實現方法,基類中實現純虛函式的方法是在函式原型的後面加上"= 0",比如 virtual void f() = 0;

1、動態繫結的定義

有乙個基類,兩個派生類,基類有乙個virtual函式,兩個派生類都覆蓋了這個虛函式。當有乙個基類的指標或者引用,該基類的指標或者引用指向不同的派生類物件時,呼叫該虛函式,那麼最終呼叫的應該是被指向物件所對應的派生類實現的虛函式。

2、為什麼能夠在執行過程中實現動態繫結?

實現動態繫結,即在執行時能夠找到派生類自己實現的虛函式,是因為可以在執行時動態的改變基類指標所指向的物件,即該基類指標指向的位址是可以變化的。物件的內部儲存了關於自己和父類的虛函式的關係。因為每次基類都是指向物件本身的,而基類通過物件本身找到了所對應的的虛函式,即派生類的虛函式。

虛函式是類的成員,是所有的物件共有的,因此要特殊儲存虛函式應該是類的事情,而不是物件的工作,物件只負責能夠找到它就可以了。

編譯器會為每個有虛函式的類建立乙個虛函式表,裡面記錄著每個虛函式。另外,每個物件都有乙個隱含指標,指向它對應的類的虛函式表。

這樣,在執行時動態繫結會按照以下過程呼叫:

首先,基類指標被賦值為派生類中物件的位址,那麼就可以找到指向這個類的虛函式的隱含指標;然後通過該虛函式的名字就可以在這個虛函式表中找到對應虛函式的位址,從而進行呼叫。

由於繼承層次中每個類都有自己的虛函式表,因此各自完成自己的動態繫結,互不影響。

C 動態繫結

c 中動態繫結是將乙個過程呼叫與相應 鏈結起來的行為。是指與給定的過程呼叫相關聯的 只有在執行期才可知的一種繫結,他是多型實現的具體形式。c 中,通過基類的引用或指標呼叫虛函式時,發生動態繫結。引用 或指標 既可以指向基類物件也可以指向派生類物件,這一事實是動態繫結的關鍵。用引用 或指標 呼叫的虛函...

c 動態繫結

c 的函式呼叫預設不使用動態繫結。要觸發動態繫結,必須滿足兩個條件 只有指定為虛函式的成員函式才能進行動態繫結 必須通過基類型別的引用或指標進行函式呼叫 因為每個派生類物件中都擁有基類部分,所以可以使用基類型別的指標或引用來引用派生類物件 示例 include include using names...

C 動態繫結

繫結是乙個把過程呼叫和響應呼叫所需要執行的 加以結合的過程。繫結是在編譯時進行的,叫作靜態繫結,也叫做靜態聯編。動態繫結 動態聯編 執行時繫結 則是在執行時進行的,因此,乙個給定的過程呼叫和 的結合直到呼叫發生時才進行。1 在c 語言中,當我們使用基類的引用 或指標 呼叫乙個虛函式時將發生動態繫結,...