On 9/20/07, Gonzalo Merayo <[EMAIL PROTECTED]> wrote: > > > A tiene que tener un método virtual llamado (comunmente, pero no es > > > obligatorio) Clone() que regresa A*, y en las clases derivadas el > > > método Clone() retorna B* o C* según cuál sea la clase implementada > > > Entonces en D, llamás al método Clone() de tu propiedad A* > > > > operator= ? > > > Si A* ya estuviese construido del tipo correcto si...el problema es > que A* apunta a NULL todavia. > > Generalmente la solucion del Clone deja a todos felices...pero hay que > analizar cada caso. El tema es quien te da el A* de origen en primer > lugar, hay 2 chances: > 1. te lo pasaron de afuera > 2. lo construyo la mismisima D > 2b. hay un factory involucrado > En el caso 1 tenes que analizar si el puntero viene de afuera parece > una agregacion y no seria conveniente copiarlo por que anda a saber si > lo tenes que eliminar despues.
y..., eso debería saberse no? no tendría que estar en la documentación del que te lo pasa? > Para el caso 2....si supiste que heredero de A construir en primer > lugar...¿por que durante la copia no sabrias cual es? Exacto, y ya que estamos, para qué polimorfismo? directamente la clase y listo... > Para 2b: ver 2. Si usás un Factory no sabés el tipo... necesitarías un CopyFactory o algo así... Saludos _______________________________________________ Lista de correo Programacion. [email protected] http://listas.fi.uba.ar/mailman/listinfo/programacion
