Ver Mensaje Individual
  #7  
Antiguo 28-08-2008
gushynet gushynet is offline
Miembro
 
Registrado: ago 2008
Posts: 26
Reputación: 0
gushynet Va por buen camino
explicacion mas detallada del problema

antes que nada, gracias por la rapidez de las respuestas. De todas formas pondré el pequeño ejemplo que estoy intentando hacer y de ahi la duda que es puesto en el foro.

Creo que lo de generico lo explique mal. Generico en relacion a una jerarquia de clases, jerarquia que explico a continuacion:

Tengo una clase base llamada TParrafo la cual tiene todos los métodos abstractos y virtuales. Entre las propiedades que tiene hay una llamada "contenido" que es de tipo AnsiString.

Tengo ademas tres clases (TPregunta,TRespuesta y TTematica) que descienden de TParrafo.

TTematica añade una propiedad AnsiString mas llamada "descripcion".


Todas las clases descritas tienen un metodo llamado asignar( declarado como virtual y abstracta en TParrafo ) al cual se le pasa un objeto de tipo parrafo y el metodo asigna el valor de todas las propiedades (en este caso solo una o dos si es de tipo TTematica) del parametro de entrada al objeto actual, el que realiza la llamada al metodo.


mi intencion es que si el objeto que llama a asignar es:
- TParrafo,TPregunta o TRespuesta compartan el mismo codigo ya que los
objetos son iguales, por lo solo se debe cambiar el valor de la propiedad 'contenido'
-Y que en Ttematica cambie la implementacion del metodo para tener en cuenta la propiedad 'descripcion' .

El problema lo encuentro al ser el parametro del metodo de tipo TParrafo. Solo acepta cosas de tipo TParrafo por lo que use un pointer para que asi aceptara cualquier tipo de objeto y dentro de la implementacion especifica del metodo realizar un cast al tipo del objeto que ha llamado al metodo. Por ejemplo:

si tengo un objeto t1 de tipo TTematica y uso su metodo asignar tenemos:

T1.Asignar(T2);

al ser T2 de tipo TTematica se produce un error. Lo mismo pasa si le paso algo de tipo TPregunta o Trespuesta aunque sean iguales a TParrafo, por ser de distinto tipo se produce un error de compilacion. De ahi el usar un pointer y dentro del metodo realizo una conversion.

En definitiva, lo que quiero es usar bien la poo pero no se como montarmelo para hace eso:

una sola implemetacion que sirva para TParrafo,TPregunta y TRespuesta y una reimplementacion en TTematica ya que la clase tiene una propiedad mas, 'descripcion' , sin que el tipo de dato (dentro de la jerarquia creada) que paso por parametro sea un problema.

Espero haberme explicado mejor, pero entre que quiero escribirlo todo y que intento resumir para que no se haga muy grande el mensaje no se si ahora se entendera mejor.

Gracias de antemano por el cable .
Un saludo.
Responder Con Cita