FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
Herencia y Casteo
Hola, que tal, mi primer mensaje al foro, espero que alguno me pueda dar una mano, tengo la siguiente herencia:
TImpresora = class(TObject) private public imprimir();abstract; end; TEpson = class(TImpresora) private public imprimir();override; end; THasar = class(TImpresora) private public imprimir();override; end; hasta ahi todo bien, el problema esta en que en la aplicacion donde uso las impresoras tengo un form de configuro la que quiero usar, el tema es como en la aplicacion se que objeto tengo que crear el TEpson o el THasar. La idea es crear un objeto que me permita abstraerme de que impresora es y solo invocar el metodo imprimir, y listo. Cuando defino un objeto impresora : TImpresora en la app, y al momento del create() le digo impresora := TEpson.Create(), pero cuando en otro necesito hacer uso del metodo imprimir no lo puedo hacer, una de las soluciones era castear el objeto impresora : TEpson(impresora).imprimir() pero seguimos en la mismo situacion debo conocer la clase del objeto de la impresora activa. Les agradeceria alguna sugerencia que me saque de la nube donde estoy. Saludos. |
#2
|
||||
|
||||
Cita:
Estas hablando de utilizar uno de los pilares de la programación orientada a objetos: El Polimorfismo. Lo que tu dices tiene que funcionar, lo usamos todos los programadores con regulariada, y no entiendo porque dices que no puedes llamar al método print, aquí tienes un ejemplo un poco extendido:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. Última edición por delphi.com.ar fecha: 03-04-2005 a las 21:46:07. |
#3
|
||||
|
||||
Cita:
Un código como éste te devolvería el cuado con el texto: TEpson.Imprimir sin necesidad de CAST, justo por cómo has realizado la creación del objeto.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Como podes deducir de lo publicado por delphi.com.ar, el problema es que en la clase padre: TImpresora el método Imprimir no es virtual. De hecho, estoy seguro que delphi debiera mostrar un mensaje de error al intentar compilar el código que publicaste, puesto que el método sobreescrito (override) en las clases hijas no existe en la tabla de métodos virtuales de la clase padre (pero esto es solo una suposición).
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
||||
|
||||
Cita:
Esto, junto con el hecho de que ni siquiera aparece procedure en la declaración del método hace pensar que PeLuCa sólo está mostrando de forma esquemática su jerarquía y para entender exactamente cuál es el problema lo recomendable es que pusiera la declaración exacta y compilable. // Saludos |
#6
|
|||
|
|||
Algo asi esperaba
Cita:
|
#7
|
||||
|
||||
Cita:
// Saludos |
#8
|
||||
|
||||
Cita:
Al final de cuentas, el que se terminará ejecutando es el método Imprimir de la clase TEpson, aún cuando se halla llamado desde un objeto referenciado por una variable de la clase TImpresora. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#9
|
|||
|
|||
Por Fin!!!!!!!!!!.
Cita:
Saludos. |
#10
|
||||
|
||||
Cita:
"acceder a los metodos de TEpson " que puede tener dos interpretaciones: el acceso a los métodos propios de la clase TEpson (los declarados a ese nivel) o el acceso a los métodos redefinidos en la clase TEpson. En el segundo caso entra el polimorfismo, no así en el primero. Y si insistí era precisamente porque algo que en principio era claro para todos, incluido PeLuCa, parecía no funcionar, de manera que había que revisar que estuviéramos hablando de lo mismo. Felizmente ya lo resolvió. // Saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|