Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ¿¿Es posible pasar una clase como parámetro con el modificador var?? (https://www.clubdelphi.com/foros/showthread.php?t=63309)

PaFernan99 09-02-2009 00:44:48

¿¿Es posible pasar una clase como parámetro con el modificador var??
 
Bueno, es eso nomás!
Estoy realizando el clásico ejercicio de Arboles Binarios, el método "espejo", que devuelve un espejo del arbol binario actual, y pensé realizarlo de esta manera...

Código Delphi [-]
procedure TArbolBinario.espejo(ab: TArbolBinario;var ac: TArbolBinario);
var acd:TArbolBinario;
begin
   if ab.getRaiz<> nil then
     begin
        ac := TArbolBinario.create(ab.getDatoRaiz);

        if (ab.getRaiz.tieneHijoIzq) then
            self.espejo(ab.getHijoIzq,ac.getHijoDer);
        if (ab.getRaiz.tieneHijoDer) then
            self.espejo(ab.getHijoDer,ac.getHijoIzq);
     end;
end;

pero al compilar la clase arroja el siguiente error:
Cita:

[Error] ArbolBinario.pas(138): Types of actual and formal var parameters must be identical
¿Existe otra manera de plantear el mismo método? porque lo querá era que me devuelva el espejo del arbol binario ab, en la variable ac.
Gracias y saludos!

Lepe 09-02-2009 06:50:02

yo le llamo "pasar por valor" a pasar un parámetro sin el var.

Los objetos en delphi son en realidad punteros, aunque lo pases por valor siempre puedes modificar sus propiedades y métodos. Lo que no puedes hacer es modificar la dirección de memoria donde reside.... porque eso es lo que se pasa por valor.

PaFernan99 09-02-2009 12:17:33

Gracias Lepe!
Saludos!

roman 09-02-2009 18:49:00

A mi me gustaría ver cómo es esa llamada que te produce el error. A juzgar por el intento que haces en tu código, estamos ante un caso en el que realmente se necesita pasar por referencia (usando var) el objeto, ya que estás regresando, no un objeto existente con propiedades modificadas, sino un nuevo objeto.

// Saludos


La franja horaria es GMT +2. Ahora son las 09:50:26.

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