這是幹什麼的? 我很困惑。(C++)superClass * myObject = new childClass()
是否有可能在左側聲明爲superClass,但在右側調用childClass?
我什麼時候需要使用這種類型的代碼?
superClass *myObject = new childClass();
這是幹什麼的? 我很困惑。(C++)superClass * myObject = new childClass()
是否有可能在左側聲明爲superClass,但在右側調用childClass?
我什麼時候需要使用這種類型的代碼?
superClass *myObject = new childClass();
做這究竟是什麼?
它創建一個childClass
類型的動態對象;並將指針轉換爲指向superClass
的指針。這是可能的,因爲(如果名字是相信的)childClass
源自superClass
。繼承定義了一個「是」的關係,以便可以將派生類(childClass
)的對象視爲它是基類的對象(superClass
)。
那麼它可能會導致內存泄漏或其他內存管理問題,因爲使用指針很難正確匹配動態對象。
是否有可能在左側聲明爲superClass,但在右側聲明瞭childClass?
在這種情況下,它是一個指針,而不是對象本身。聲明指向基類類型的指針確實可以指向派生類類型的對象。這就是面向對象的多態在C++中的工作原理:與基類交互的代碼可以與任何派生類進行交互。
我什麼時候需要使用這種類型的代碼?
當你想要面向對象的多態性。你的介紹性C++書應該解釋這是如何工作的 - 在這裏這個主題太大了,不能令人滿意地解釋。
你從哪裏看到這個?如果那裏是真實世界的名字,它可能值得討論,但標識符「superClass」和「childClass」使它看起來像是從教程示例中解脫出來的,並且您只需要在上下文中閱讀它。 – Potatoswatter
我希望這是一個重複的東西,我只發現有關切片及其預防的問題。注意回答者,在這個問題中沒有切片,只形成對基礎子對象的引用。 (如果將它傳遞給拷貝構造函數,會發生什麼情況。) – Potatoswatter
如果superClass是抽象基類,該怎麼辦? –