以下程式輸出結果是____。
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 引...