沒有指標/引用的多態性:解開謎團
多態性的概念很大程度上依賴於指標或引用的使用。雖然指針在直觀上似乎很有幫助,但引用在這種情況下的作用常常會引起問題。本文旨在闡明多態性實作中指標/引用必要性背後的根本原因。
理解指標和引用
指標和引用是實現多態性的強大工具。 C 提供對物件的間接存取。指標儲存物件的記憶體位址,而引用則為現有物件提供別名,從而有效地允許存取原始物件而無需建立副本。
多態性和動態綁定
多態性使得不同派生類別的物件能夠在運行時根據其實際類型響應相同的方法呼叫。這種動態綁定行為是透過虛擬函數表來實現的。這些表包含指向每個衍生類別的虛擬方法的實作的指標。
指標/引用的角色
當透過以下方式將衍生類別物件傳遞給基底類別函數時指標或引用,實際物件的類型可以在執行時確定。這是因為指標或引用保存了物件的記憶體位址或別名,這使得編譯器可以存取虛擬函數表並相應地解析方法呼叫。
使用值類型的後果
如果基類對象持有按值傳遞的派生類對象的副本(沒有指針或引用),則編譯器無法在運行時確定該物件的實際類型。這是因為物件的副本與衍生類別的虛擬函數表沒有聯繫。因此,多態性失敗,導致呼叫基底類別方法而不是衍生類別方法。
結論
C 中的多態性需要指標或引用來啟用動態綁定並在運行時確定派生類別物件的實際類型。如果沒有指標或引用,編譯器就無法確定要使用的虛擬函數表,導致多態性失敗,失去根據實際類型處理物件的能力。
以上是為什麼 C 中的多態性需要指標/引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!