c 學習筆記 動態繫結

2021-07-05 02:55:33 字數 1160 閱讀 6711

有如下c++**:

1

2

3

4

5

6

7

8

9

structa

virtualvoidbar()

a()

};

structb:a

voidbar()

};

那麼         1

2

3

a *p=newb;

p->foo();

p->bar();

這個題的結果是barfoob_bar

為什麼㖏,我們研究下哈,

首先說明一下,那兩各foo()是非需函式,這是個不好的寫法,他在這裡只是說明動態繫結這個東西;

首先說一下說明是動態繫結:

動態繫結是指在執行期間(非編譯期)判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。

程式執行過程中,把函式(或過程)呼叫與響應呼叫所需要的**相結合的過程稱為動態繫結。

多型實現的具體形式。

現在我們定乙個b* d,這時候d->foo();和p->foo();調動的是同乙個函式嗎?答案很明顯是否定;

這裡雖然函式名一樣,但已經是靜態繫結了,兩個型別分別呼叫自己類內定義的foo()函式。

這時候在看一下p->bar  這裡雖然p是個a型的指標,但是執行**時涉及到乙個動態繫結問題,p的實際型別是個b,所以呼叫b函式的bar()而不是a的;

最後總結一句話,只有虛函式才涉及到動態繫結,其他可以說都是靜態繫結。

注意:a()這裡,在建構函式或者析構函式裡呼叫虛函式,此時虛函式不具有多型性。

C 筆記(八) C 動態繫結

在c 中,若派生類中有與基類重名的函式,則使用派生類的 這叫函式覆蓋 補充一點 例 include class animal animal public void eat void sleep class dog public animal dog public void eat void slee...

C 動態繫結

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

c 動態繫結

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