C 動態繫結

2021-08-28 07:52:02 字數 841 閱讀 6905

c++中動態繫結是將乙個過程呼叫與相應**鏈結起來的行為。是指與給定的過程呼叫相關聯的**,只有在執行期才可知的一種繫結,他是多型實現的具體形式。

c++中,通過基類的引用或指標呼叫虛函式時,發生動態繫結。引用(或指標)既可以指向基類物件也可以指向派生類物件,這一事實是動態繫結的關鍵。用引用(或指標)呼叫的虛函式在執行時確定,被呼叫的函式是引用(或指標)所指物件的實際型別所定義的。

c++中動態繫結是通過虛函式實現的。而虛函式是通過一張虛函式表(virtualtable)實現的。這個表中記錄了虛函式的位址,解決繼承、覆蓋的問題,保證動態繫結時能夠根據物件的實際型別呼叫正確的函式。

在c++的標準規格說明書中說到,編譯器必需要保證虛函式表的指標存在於物件例項中最前面的位置(這是為了保證正確取到虛函式的偏移量)。這意味著我們通過物件例項的位址得到這張虛函式表,然後就可以遍歷其中函式指標,並呼叫相應的函式 。

1.動態繫結在函式呼叫時需要在虛函式表中查詢,所以效能比靜態函式呼叫稍低。

2.通過基類型別的指標訪問派生類自己的虛函式將發生錯誤。

把乙個方法與其所在的類/物件關聯起來叫做方法的繫結。繫結分為靜態繫結(前期繫結)和動態繫結(後期繫結)。靜態繫結(前期繫結)是指在程式執行前就已經知道方法是屬於那個類的,在編譯的時候就可以連線到類的中,定位到這個方法。動態繫結(後期繫結)是指在程式執行過程中,根據具體的例項物件才能具體確定是哪個方法。

靜態繫結發生於資料結構和資料結構間,程式執行之前。靜態繫結發生於編譯期,因此不能利用任何執行期的資訊。它針對函式呼叫與函式的主體,或變數與記憶體中的區塊。動態繫結則針對執行期產生的訪問請求,只用到執行期的可用資訊。在物件導向的**中,動態繫結意味著決定哪個方法被呼叫或哪個屬性被訪問,將基於這個類本身而不基於訪問範圍。

c 動態繫結

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

C 動態繫結

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

C 動態繫結

動態繫結是在執行期間發生的繫結,發生動態繫結的函式的執行版本由傳入的實際引數型別決定,在執行時覺得函式的版本,所以動態繫結又稱執行時繫結,動態繫結是c 的多型實現的一種形式。在c 中,當使用基類的引用或指標呼叫乙個虛函式時將發生動態繫結。c 中的動態繫結通過虛函式實現。而虛函式是通過一張虛函式表 v...