C 虛函式中的預設引數

2021-10-09 07:40:51 字數 940 閱讀 3685

注意:虛函式中盡量不要使用預設引數!!!父類

#pragma once

class

base

;

#include

"base.h"

base::

base()

base::

~base()

子類

#pragma once

#include

"base.h"

classa:

public base

;

#include

"a.h"

#include

a::a()

a::~a(

)void a::

setnumber

(int num )

呼叫

base* a1 =

new a;

a1->

setnumber(9

);base* a2 =

new a;

a2->

setnumber()

; a* a3 =

new a;

a3->

setnumber()

;

9

24

這是因為帶有預設引數的虛函式,在使用預設引數的時候是靜態繫結的,預設引數值是由宣告的指標型別的預設引數決定的,而不是由物件的型別預設引數決定。

也就是說,在沒有輸入預設引數的情況下,編譯期由指標的型別決定了引數,如果輸入了引數則是動態繫結,根據物件的型別來決定呼叫哪個函式。

aaa

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

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

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

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

虛函式的預設引數問題

q include using namespace std class base 乙個表示幾何形狀的類 class shape class rectangle public shape class circle public shape 用圖形來表示是下面這樣 shape rectangle cir...