C 預設引數靜態繫結

2021-07-23 23:57:05 字數 649 閱讀 6187

以下程式輸出結果是____。

class a

記住: virtual 函式是動態繫結,而預設引數值卻是靜態繫結。 意思是你可能會 

在「呼叫乙個定義於派生類內的virtual函式」的同時,卻使用基類為它所指定的預設引數值。

結論:絕不重新定義繼承而來的預設引數值!(可參考《effective c++》

條款37)

對於本例:

b*p = newb;

p->test();

p->test()執行過程理解:

(1) 由於b類中沒有覆蓋(重寫)基類中的虛函式test(),因此會

呼叫基類a中的test();

(2) a中test()函式中繼續呼叫虛函式 fun(),因為虛函式執行動態繫結,p此時的動態型別(即目前所指物件的型別)為b*,因此此時呼叫虛函式fun()時,

執行的是b類中的fun();所以先輸出「

b->」;

(3) 

預設引數值是靜態繫結,即此時

val的值使用的是基類

a中的預設引數值,其值在編譯階段已經繫結,值為1,所以輸出「

1」;最終輸出「

絕不重新定義繼承而來的預設引數值!

C 靜態方法 命名引數 預設引數 方法的過載

static關鍵字可以修飾類 方法 成員變數,修飾後即靜態類 方法 字段 c 中靜態方法呼叫可通過 類名.方法 來呼叫,類名.欄位 public class a 靜態屬性 定義乙個靜態方法 public static void getname class program 靜態成員被呼叫記憶體中,只要...

C 預設引數

一 預設引數 在c 中,可以為引數指定預設值。在函式呼叫時沒有指定與形參相對應的實參時,就自動使用預設引數。預設引數的語法與使用 1 在函式宣告或定義時,直接對引數賦值。這就是預設引數 2 在函式呼叫時,省略部分或全部引數。這時可以用預設引數來代替。注意 1 預設引數只可在函式宣告中設定一次。只有在...

C 預設引數

函式的預設引數值,即在定義引數的時候同時給它乙個初始值。在呼叫函式的時候,我們可以省略含有預設值的引數。也就是說,如果使用者指定了引數值,則使用使用者指定的值,否則使用預設引數的值。void func int i 1,float f 2.0f,double d 3.0 int main void 引...