2012-02-13 5 views
6

Jeśli rzutuję obiekt na typ bazowy i zapisuję go na std :: map, a następnie otrzymuję go z powrotem i przekształcam go na typ pochodny, czy nadal mam prawidłowe dane w pochodnych klasach?Rzuca obiekt z wyprowadzonych na bazę i od tyłu

Czy muszę wykonać konkretny rodzaj obsady?

+0

Odpowiedź sepp2k dotyczy sposobu przechowywania danych. Dla rzutów dostępne są 'static_cast' i' dynamic_cast' oraz zwykły casting w stylu C. – Firedragon

+2

Należy również zauważyć, że downcasting jest "często" zapachem kodu. –

Odpowiedz

12

Jeśli rzucasz wskaźniki na obiekt, nie stanowi to problemu, ponieważ wskaźniki będą wskazywać na ten sam obiekt.

Jeśli rzutujesz rzeczywisty obiekt, wszystkie informacje z podklasy zostaną utracone po przekonwertowaniu na nadklasę, więc jej ponowne wysłanie nie spowoduje przywrócenia tych informacji.

+0

Odlewanie rzeczywistego obiektu? W jaki sposób? Użyj 'static_cast'? – Alcott

+0

@Alcott Tak, lub w stylu C rzutuje lub po prostu używa konstruktora kopiowania lub operatora przypisania, np. 'SuperClass obj (SubClass());' lub 'obj = SubClass();' (choć technicznie to może nie liczyć się jako obsada). – sepp2k

Powiązane problemy