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