虛擬函數中意外的預設參數行為:了解根本原因
在此程式碼片段中,您遇到與預設值相關的有趣問題虛函數的參數。儘管預期輸出為“D--data=20”,但您卻觀察到“D--data=10”。讓我們深入研究內部機制以理解根本原因。
在您的範例中,您有兩個類別 B 和 D,它們具有一個名為 print 的虛擬函數,該函數採用預設參數。在 D 類別中,您重寫 print 函數並提供不同的預設參數。當您建立 D 的實例時,您會透過指向 B 的指標存取列印函數。
根據C 標準(8.3.6.10),「虛擬函數呼叫使用宣告中的預設參數虛函數由表示物件的指標或引用的靜態類型決定。」這意味著,當透過指向基底類別的當指標呼叫虛擬函數時,它使用基底類別宣告中定義的預設參數,而不管在衍生類別中重寫的預設參數如何。
因此,當您呼叫透過指標bp列印,預設參數由bp的靜態型別決定,即B。因此,使用B::print的預設參數,導致輸出“D--data=10”而不是預期的“D--data=20。”
以上是為什麼虛擬函數的預設參數使用基底類別值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!