虛函數和預設參數
在物件導向程式設計中,虛函數提供了重寫衍生類別中方法的機制。然而,問題是虛函數是否可以有預設參數,以及它們的行為如何被衍生類別繼承。
虛函數可以有預設參數嗎?
可以,虛函數函數可以有預設參數。預設參數在基底類別的虛函數聲明中指定。
預設參數的繼承
基底類別中的預設參數不會被衍生類別繼承。這意味著派生類別不會自動從基底類別繼承預設參數。
預設參數的決定
使用哪些預設參數取決於靜態型別用於呼叫虛擬函數。如果透過基底類別物件、指標或參考進行調用,則使用基底類別中定義的預設參數。如果透過衍生類別物件、指標或參考進行調用,則使用衍生類別中定義的預設參數。
範例
以下範例示範虛函數中預設參數的行為:
struct Base { virtual void f(int a = 7); }; struct Derived : public Base { void f(int a = 8); };
在此範例中,基底類別定義了一個虛函數f(),其預設參數為7.衍生類別重寫該函數並定義自己的預設參數8。
如果我們透過基底類別物件呼叫 f(),將使用預設參數 7。但是,如果我們透過衍生類別物件呼叫 f(),則會使用預設參數 8。
建議做法
建議避免使用預設值如果可能的話,將參數放在虛函數中。這是因為它可能導致程式碼庫不一致和混亂。如果需要預設參數,最佳實踐是在衍生類別的重寫函數中明確指定預設參數。
以上是虛函數可以有預設參數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!