了解C 中的繼承和物件初始化以實現虛擬函數存取
在C 中,繼承允許建立繼承屬性和行為的派生類別來自基底類別。然而,C 中物件的初始化順序會影響虛擬函數的行為。
問題:
當在 C 中使用具有 virtual 的基類構造物件時函數,為什麼該函數會表現出來出乎意料嗎?
答案:
這裡的關鍵概念是基底類別和衍生類別的初始化順序。在 C 中,基底類別在衍生類別之前構造。
說明:
在提供的範例中:
要修正此行為:
為了確保在物件建構期間呼叫派生類別的value() 函數,您應該使用衍生類別實例的位址顯式初始化基底類別:
derived example; base(&example).value()
透過傳遞派生物件的位址,您可以指示基本建構函式在衍生物件上調用value() 函數,有效地將物件「成熟」為其完整的派生形式。
以上是為什麼虛擬函數在 C 物件初始化期間表現異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!