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
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".