1、在基類的某函數中調用虛函數的狀況:
依然是動態綁定的,依然取決於基類指針實際指向的對象類型!
如:
派生類重寫了虛函數print();
僅在基類的test()函數調用print()
實際輸出:Child
說明即便是在基類的某函數中調用虛函數,仍然要看對象的實際類型,是動態綁定的!
2、虛函數帶默認實參的狀況:
當虛函數有默認實參的時候,這個實參的默認值將在編譯時肯定,當調用虛函數的時候若是此參數沒傳入,那麼默認值將使用「調用該虛函數的對象類型(並非實際類型)來肯定」!即不隨動態綁定!與對象實際類型無關!
好比:
(1)若是基類類指針調用了這個虛函數並不傳參,那麼參數的默認值是派生類裏聲明的值,而無論此基類指針實際指向了基類仍是派生類!
(2)若是派生類指針調用了這個虛函數並不傳參,那麼參數默認值是派生類裏聲明的值。
一個程序:
基類的虛函數:print(),默認實參值=0
派生類重寫了虛函數print(),默認實參值=100
輸出爲:Child:0 而不是100!
默認實參的默認值是編譯時肯定的,因爲b是Base類型指針,因此這裏的i默認值 = Base類中print的i默認值,也就是0
因此,儘可能讓派生類虛函數的默認實參與基類的一致~