Problème d'affectation d'un objet lors d'un Create
Bonjour,
Je viens de faire un code représentatif de ce que je souhaite obtenir.
A savoir, déclarer une classe ancêtre ne connaissant que l'interface de l'objet, et dont l'instanciation fournisse un objet d'une classe descendante, qui implémente les méthodes. Afin de déléguer les détails du descendant à une autre unité ou librairie.
Ce type de code fonctionne en Delphi 5, mais je me heurte au portage sous Lazarus 0.9.30 FPC 2.4.2 Windows 7 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| type
TMonAncetre = class(TObject) // classe de base
private
FField: integer;
public
constructor Create(aParam: integer); overload;
function GetTruc: integer; virtual; abstract;
end;
TMonFils = class(TMonAncetre) // descendant chargé de l'implémentation
private
FTruc: integer;
public
constructor Create(aParam: integer);
function GetTruc: integer;
end;
constructor TMonFils.Create(aParam: integer);
begin
inherited;
FField:=aParam;
FTruc:=-1;
end;
function TMonFils.GetTruc: integer;
begin
Result:=FTruc*FField;
end;
function CreateFils(aParam: integer): TMonAncetre; // fonction (CallBack si déclarée ailleurs) qui crée l'objet désiré
begin
Result:=TMonFils.Create(aParam);
end;
constructor TMonAncetre.Create(aParam: integer); // seule fonction à implémenter pour l'ancêtre
var
temp: TMonAncetre;
begin
// syntaxe initiale fonctionnelle en Delphi : self:=CreateFils(aParam);
temp:=CreateFils(aParam);
self:=temp; // le problème se pose là, je crois... mais pb de débugger
end;
procedure TForm1.Button2Click(Sender: TObject);
var
TestObject: TMonAncetre;
begin
TestObject:=TMonAncetre.Create(123);
ShowMessage(IntToStr(TestObject.GetTruc));
TestObject.Free;
end; |
Merci pour vos idées.