Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-07-2006
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Llamar a método virtual de un objeto pasado como parámetro

He estado buscando en el foro y en Internet pero no he encontrado nada.

Tengo un programa que, simplificando mucho, es el siguiente. (No creo que a nadie le cueste seguirlo)

Código Delphi [-]
PROGRAM base;

TYPE
  CLASE_BASE = CLASS
  PUBLIC
    PROCEDURE Metodo; VIRTUAL;
  END;

  CLASE_HIJA = CLASS (CLASE_BASE)
  PUBLIC
    PROCEDURE Metodo; OVERRIDE;
  END;

  PROCEDURE CLASE_BASE.Metodo;
  BEGIN
    WriteLn ('Llamó a CLASE_BASE');
  END;

  PROCEDURE CLASE_HIJA.Metodo;
  BEGIN
    WriteLn ('Llamó a CLASE_HIJA');
  END;

(* Aquí está el problema.  Es un procedimiento que se va a usar como
   "callback", de ahí que reciba un POINTER. *)
PROCEDURE Procedimiento (Objeto: POINTER);
BEGIN
  WITH CLASE_BASE (Objeto) DO
    Metodo;
END;

VAR
  Objeto: CLASE_BASE;
BEGIN
(* Aquí ponemos en marcha todo. *)
  Objeto := CLASE_HIJA.Create;
{ Simulamos una llamada "callback" }
  Procedimiento ( POINTER (Objeto));
  Objeto.Free;
END.

Como dice el comentario, voy a utilizar un procedimiento como "callback", es decir, que voy a pasar la dirección de dicho procedimiento a una librería ya escrita para que lo llame cuando sea necesario (parecido a la función de procesamiento de mensajes de ventana en Windows).

El problema es que cuando se llama al Procedimiento siempre llama al método de la CLASE_BASE y nunca al de la CLASE_HIJA. ¿Por qué me sucede esto? ¿Cómo puedo hacer que llame al método apropiado?

Última edición por dec fecha: 11-07-2006 a las 16:17:09.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Qué son los métodos virtuales y los métodos de clase? David OOP 4 27-07-2019 23:04:30
Virtual Replay - Repetición Virtual de los Goles del Mundial delphi.com.ar La Taberna 0 26-06-2006 17:15:07
Llamar a un método sin tener instacia. piccolo2101 Varios 5 15-12-2005 10:14:35
Como hacer un teclado virtual Andres_Franco DelphiPACK 2 07-01-2004 09:23:12
¿Cómo puedo llamar al método heredado de una clase que no es el ancestro directo? sarackganda OOP 4 15-12-2003 22:19:49


La franja horaria es GMT +2. Ahora son las 08:21:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi