C 中的兩種繫結方式(靜態繫結 動態繫結)

2021-10-14 10:23:31 字數 1098 閱讀 3437

靜態繫結:在編譯時刻,根據指標或引用變數的靜態型別來決定成員函式屬於哪乙個類。

動態繫結:在執行時刻,根據指標或引用變數實際指向或引用的物件型別(動態型別)來確定成員函式屬於哪乙個類。

需要注意:

c++預設的繫結方式是靜態繫結。示例如下:

#include

using

namespace std;

class

bird

;//鳥會飛

void

walk()

//鳥會走};

class

penguin

:public bird

void

walk()

};void

func1

(bird&bd)

void

func2

(bird*pb)

intmain()

必須在程式中顯式地指出動態繫結。

動態繫結的實現條件:

類的定義中成員函式宣告為虛函式

通過引用或指標來訪問物件的虛函式

virtual宣告需要注意:

一旦在基類中指定某成員函式為虛函式,那麼,不管在派生類中是否給出virtual宣告,派生類(以及派生類的派生類,…)中對其重定義的成員函式均為虛函式

重定義: 對派生類中定義的成員函式, 其函式名, 引數個數和型別以及返回值型別與基類的某個虛成員函式相同(override)

動態繫結示例:

#include

using

namespace std;

class

bird

;//鳥會飛

void

walk()

//鳥會走};

class

penguin

:public bird

void

walk()

};void

func1

(bird&bd)

void

func2

(bird*pb)

intmain()

C 中動態繫結和靜態繫結

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

C 中動態繫結和靜態繫結

2009 03 27 15 35 1053人閱讀收藏 舉報c funclass 編譯器c c 中,非虛函式都是靜態繫結,而虛函式卻是動態繫結。為了能夠更清楚地了解靜態繫結與動態繫結,我們可以看下面這個例子 include using namespace std class b 那麼兩次呼叫fun 函...

C 中的動態繫結與靜態繫結

c 中,非虛函式都是靜態繫結,而虛函式卻是動態繫結。重點 建構函式和析構函式中呼叫虛函式,虛函式是靜態繫結的,本類只會呼叫類本身的虛函式。為了能夠更清楚地了解靜態繫結與動態繫結,我們可以看下面這個例子 include using namespace std class b 那麼兩次呼叫fun 函式是...