C 中 虛函式中的預設引數問題

2021-07-02 04:57:08 字數 675 閱讀 8410

原文**nwplei的部落格

當通過指標呼叫乙個物件的方法時,如果該方法是虛函式,則實際呼叫的是該例項的方法。

當預設引數和虛函式一起出現的時候到底用哪個預設值呢?虛函式是動態繫結的,但是為了執行效率,預設引數是靜態繫結的。

也就是 指標是哪種型別,就呼叫該型別對應的類中,該函式定義時的預設值。

#include 

using namespace std;

class a

由上可知pa->out()和pa->out(3)呼叫都是函式a::out(int i),

由上可知pb->out()和pb->out(4)呼叫都是函式b::out(int i),

預設引數是靜態繫結的,pb->out()時,pb的靜態型別是a*,它的預設引數是1;但是呼叫的是b::out(int i)

編寫**驗證了一下,正確。

對於這個特性,估計沒有人會喜歡。所以,永遠記住:「絕不重新定義繼承而來的預設引數(never redefine function』s inherited default parameters value.)」

上面得輸出如下

C 中 虛函式中的預設引數問題

當通過指標呼叫乙個物件的方法時,如果該方法是虛函式,則實際呼叫的是該例項的方法。當預設引數和虛函式一起出現的時候到底用哪個預設值呢?虛函式是動態繫結的,但是為了執行效率,預設引數是靜態繫結的。也就是 指標是哪種型別,就呼叫該型別對應的類中,該函式定義時的預設值。include using names...

C 虛函式中的預設引數

注意 虛函式中盡量不要使用預設引數!父類 pragma once class base include base.h base base base base 子類 pragma once include base.h classa public base include a.h include a ...

虛函式的預設引數問題

q include using namespace std class base 乙個表示幾何形狀的類 class shape class rectangle public shape class circle public shape 用圖形來表示是下面這樣 shape rectangle cir...