2012-02-13 43 views
6

如果我將一個對象轉換爲基本類型並將其存儲在std :: map中,然後將其取回並重新轉換爲派生類型,那麼我是否仍然有正確的派生類成員中的數據?從派生到基地,而不是返回投射對象

我是否需要製作特定種類的演員?

+0

sepp2k的答案涵蓋了如何保持數據。對於劇組''static_cast''和'dynamic_cast'以及通常的C風格演員都是可用的。 – Firedragon 2012-02-13 13:53:30

+2

另請注意,向下轉換是「經常」的代碼異味。 – 2012-02-13 14:11:18

回答

12

如果您將指針轉換爲對象,則不會出現問題,因爲指針仍將指向同一對象。

如果要轉換實際對象,則轉換爲超類時,子類中的所有信息都將丟失,因此將其轉換回來將不會恢復該信息。

+0

投射實物?怎麼樣?使用'static_cast'? – Alcott 2012-03-31 12:46:18

+0

@Alcott是或C風格強制轉換或簡單地使用拷貝構造函數或賦值運算符,即''SuperClass obj(SubClass());''或'obj = SubClass();'(儘管從技術上講可能不會算作一個強制轉換)。 – sepp2k 2012-03-31 13:35:29

相關問題