2012-02-13 9 views
6

Si lanzo un objeto al tipo base y lo almacena en un archivo std ::, y luego lo recupero y lo vuelvo a traducir al tipo derivado, ¿sigo teniendo el correcto? datos en los miembros de la clase derivada?Emitir objeto de derivada a base y volver

¿Debo hacer un tipo específico de yeso?

+0

La respuesta de sepp2k cubre cómo guardar los datos. Para los lanzamientos 'static_cast' y' dynamic_cast' están disponibles, así como el fundido de estilo C habitual. – Firedragon

+2

También tenga en cuenta que downcasting es "a menudo" un olor a código. –

Respuesta

12

Si está lanzando punteros al objeto, no hay problema porque los punteros seguirán apuntando al mismo objeto.

Si está lanzando el objeto real, toda la información de la subclase se perderá cuando se convierta en la superclase, por lo que devolverla no restaurará esa información.

+0

¿Lanzar el objeto real? ¿Cómo? Use 'static_cast'? – Alcott

+0

@Alcott Sí, o moldes de estilo C o simplemente usando el constructor de copias o el operador de asignación, es decir, 'SuperClass obj (SubClass());' o 'obj = SubClass();' (aunque técnicamente eso podría no contar como un molde) – sepp2k

Cuestiones relacionadas