關於虛函式的預設實參的問題

2021-10-09 03:32:49 字數 654 閱讀 2798

a.h

class a;

a.cpp

void a::log(int a, int b, int c) const" << std::endl;

}b.h

#include "a.h"

class b : public a;

b.cpp

void b::log(int a, int b, int c) const" << std::endl;

}main.cpp

#include "a.h"

#include "b.h"

int main()

程式輸出為 

b class 

a class

可以看到,當pa指標指向不同的物件時,呼叫的虛函式是不一樣的,發生了動態繫結,但是預設實參使用的都是基類的虛函式的預設實參。

c++primer中講道:

和其他函式一樣,虛函式也可以擁有預設實參。如果某次函式呼叫使用了預設實參,則該實參由本次呼叫的靜態型別決定。

因為指標是基類的指標,所以使用基類的預設實參,即使實際呼叫了派生類的虛函式。

因此,作者也強調,

如果虛函式使用實參,則基類和派生類中定義的預設實參最好一致。

虛函式中的預設實參

c premier 先看例子吧 include iostream using namespace std class base class derived public base public int foo int ival 2048 cout cout cout 我是初學c 用編譯器執行突然發現...

虛函式與預設實參

include using namespace std 2013.9.5 c primer p482 虛函式也可以有預設實參。如果有用在給定呼叫中的預設實參值,該值將在編譯時確定。如果乙個呼叫省略了具有預設值的實參,則所用的值由呼叫該函式的型別定義,與物件的動態型別無關。通過基類的引用或指標呼叫虛函...

c 虛函式與預設實參

c primer 中原文 像其他任何函式一樣,虛函式也可以有預設實參。通常,如果有用在給定呼叫中的預設實參值,該值在編譯時確定。如果乙個呼叫省略了具有預設值的實參,則所用的值由呼叫該函式的型別定義,與物件的動態型別無關 通過基類的引用或指標呼叫虛函式時,預設實參為在基類虛函式宣告中指定的值,如果通過...