靜態繫結:在編譯時刻,根據指標或引用變數的靜態型別來決定成員函式屬於哪乙個類。
動態繫結:在執行時刻,根據指標或引用變數實際指向或引用的物件型別(動態型別)來確定成員函式屬於哪乙個類。
需要注意:
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 函式是...