2016-06-21 62 views
0

我有兩個類(TypeA和TypeB),其中TypeB擴展TypeA。數組繼承內的C++對象

如果我創建像這樣的物體:

ATypeA* NewObject = SpawnObject<ATypeB>();

菌種對象方法只是創建一個新的ATypeB對象

然後將其存儲在類型A的陣列,是內的對象TypeA或TypeB的數組?

+0

它將來自TypeA – STF

+0

您是否將對象或指針存儲在數組中? –

+0

你只能得到指針和引用的多態性。當你分配一個常規變量時,你只需要獲得該類的切片。 – Barmar

回答

2

它取決於你的數組以及你如何分配對象。

如果數組被聲明爲TypeA myArray[10];和分配使用myArray[0] = *NewObject;那麼對象數組中的將是一個切片的TypeA類型的*NewObject拷貝你的對象。

如果數組被聲明爲TypeA* myArray[10];(可能是你的意圖),你使用myArray[0] = NewObject;則數組將包含一個指針NewObject指向同一個對象分配你的對象,TypeB類型的課程。

也就是說,你應該考慮使用std::vector<std::unique_ptr<TypeA>>而不是原始數組。它會讓你的代碼更簡單,更安全。