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

Responder a