Ver Mensaje Individual
  #5  
Antiguo 30-01-2009
poyo poyo is offline
Miembro
 
Registrado: ene 2009
Posts: 47
Reputación: 0
poyo Va por buen camino
Bueno, primero quería decir que gracias por las respuestas.
Segundo que, lo que quiero hacer, responde a generar automáticamente una especie de árbol de categorías de objetos que tengo creados en base a sus clases abstractas... todas dedivan de una clase madre pero el tema es que se desconozcen la demás ya que la idea es expandir el sistema mediante plugins.

Comento lo que estuve viendo.

Es raro todo esto... pareciera como que lo de las clases abstractas está implementado a medias o no está del todo claro.
En la documentación dice:

"An abstract class is a class with at least one pure virtual function. A virtual function is specified as pure by setting it equal to zero. An abstract class can be used only as a base class for other classes. No objects of an abstract class can be created. An abstract class cannot be used as an argument type or as a function return type. However, you can declare pointers to an abstract class. References to an abstract class are allowed, provided that a temporary object is not needed in the initialization."


hice la siguiente prueba:

declaré:
Código Delphi [-]
procedure TMyClass.showa;
begin
  showmessage(IntToStr(a));
end;

function TMyClass.retself: TMyClass;
begin
  result := self;
end;

procedure TMyClass.ArgOfAbstractClass(AClass: TMyClass);
begin
  //do nothing
end;

implementation

procedure TMyClass.showa;
begin
  showmessage(IntToStr(a));
end;

////////////////////

procedure prueba;
var
  a : TMyClass;
begin
  a := TMyClass.Create;
  a.a := 10;
  a.showa;
  showmessage(a.retself.ClassName);
end;

Y lo ejecuté y funcionó como si nada... el compilador no me tiró ni un warning y en runtime tampoco se me avisó de nada.

revisé los units Typinfo, system y classes y no vi nada que haga referencia.
A lo mejor no revisé bien... aunque por la manera de funcionar, o no estoy entendiendo del todo el concepto o está medio verde la implementación.

parece que TMyClass = class abstract funciona como si fuera un simple comentario
TMyClass = class // abstract

de hecho si se declara de la siguiente manera compila igual:
TMyClass = class abstract abstract abstract abstract abstract abstract abstract abstract
curioso, no?

Ya me arreglé (provisoriamente) poniéndo una función virtual llamada "isBaseClass".
Responder Con Cita