靜態繫結和動態繫結

2021-08-10 20:58:39 字數 516 閱讀 9668

物件的靜態型別:

物件在宣告是採用的型別,在編譯期確定;

物件的動態型別:

當前物件所指的型別,在執行期決定,物件的動態型別可以更改,但靜態型別無法更改。

靜態繫結:

繫結的是物件的靜態型別,某特性(比如函式)依賴於物件的靜態型別,發生在編譯期。

動態繫結:

繫結的是物件的動態型別,某特性(比如函式)依賴於物件的動態型別,發生在執行期。

只有虛函式才使用的是動態繫結,其他的全部是靜態繫結。

當預設引數和虛函式一起出現的時候情況有點複雜,極易出錯。我們知道,虛函式是動態繫結的,但是為了執行效率,預設引數是靜態繫結的。

#include

using

namespace

std;

class b

$ ./a.exe

20derive

10derive

derive func

base func

靜態繫結和動態繫結

c 中,非虛函式都是靜態繫結,而虛函式卻是動態繫結。為了能夠更清楚地了解靜態繫結與動態繫結,我們可以看下面這個例子 include using namespace std class b 那麼兩次呼叫fun 函式是否相同呢?當然,如果d中沒有定義fun 函式 如例子中 那麼兩次呼叫的行為肯定會是一樣...

C 靜態繫結和動態繫結

c 為了支援多型性,才用了動態繫結和靜態繫結。首先理解四個名詞 1.物件的靜態型別 物件在宣告時採用的型別,是在編譯期確定的。2.物件的動態型別 目前所指物件的型別,是在執行期決定的。class b class c public b class d public b d pd new d pd的靜態...

動態繫結和靜態繫結

繫結 binding 是指將變數和函式名轉換成位址的過程 絕大部分的順序執行邏輯中函式呼叫或某個確定資料型別的class型別的物件對成員呼叫都屬於靜態繫結 include using namespace std class employee class teamper public employee...