2014-02-28 28 views
0

這是幹什麼的? 我很困惑。(C++)superClass * myObject = new childClass()

是否有可能在左側聲明爲superClass,但在右側調用childClass?

我什麼時候需要使用這種類型的代碼?

superClass *myObject = new childClass(); 
+0

你從哪裏看到這個?如果那裏是真實世界的名字,它可能值得討論,但標識符「superClass」和「childClass」使它看起來像是從教程示例中解脫出來的,並且您只需要在上下文中閱讀它。 – Potatoswatter

+0

我希望這是一個重複的東西,我只發現有關切片及其預防的問題。注意回答者,在這個問題中沒有切片,只形成對基礎子對象的引用。 (如果將它傳遞給拷貝構造函數,會發生什麼情況。) – Potatoswatter

+0

如果superClass是抽象基類,該怎麼辦? –

回答

-1

有一個在C++一個importent東西,叫做polymorphism

+0

這根本不回答OP的問題,應該是評論而不是答案。 –

1

做這究竟是什麼?

它創建一個childClass類型的動態對象;並將指針轉換爲指向superClass的指針。這是可能的,因爲(如果名字是相信的)childClass源自superClass。繼承定義了一個「是」的關係,以便可以將派生類(childClass)的對象視爲它是基類的對象(superClass)。

那麼它可能會導致內存泄漏或其他內存管理問題,因爲使用指針很難正確匹配動態對象。

是否有可能在左側聲明爲superClass,但在右側聲明瞭childClass?

在這種情況下,它是一個指針,而不是對象本身。聲明指向基類類型的指針確實可以指向派生類類型的對象。這就是面向對象的多態在C++中的工作原理:與基類交互的代碼可以與任何派生類進行交互。

我什麼時候需要使用這種類型的代碼?

當你想要面向對象的多態性。你的介紹性C++書應該解釋這是如何工作的 - 在這裏這個主題太大了,不能令人滿意地解釋。

相關問題