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

2021-08-15 04:03:30 字數 918 閱讀 7684

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

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

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

#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 v

alue.)」

上面得輸出如下

參考**:

參考書籍:c++ primer p482

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

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

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

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

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

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...