Factory - Class Create wird nicht ausgeführt

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
schoschy
Beiträge: 26
Registriert: Di 18. Okt 2022, 15:46

Factory - Class Create wird nicht ausgeführt

Beitrag von schoschy »

Hey,

ich bastel hier gerade in einem Projekt mit mehreren Geräten, die an API angebunden werden sollen.
Dazu wollte ich eine Factory verwenden.
Bsp. von taazz:
https://forum.lazarus.freepascal.org/in ... ic=21076.0

Wenn ich jetzt eine der Klassen um einen Constructor erweiter, wird dieser aber nicht aufgerufen.

Code: Alles auswählen

  { TChimp }

  TChimp = class(TApe)
  public
    procedure Print;override;
    constructor Create;
  end;
  ...
  
constructor TChimp.Create;
begin
  WriteLn('Loading Chimp!');
end;
In einer einfachen Console ausgeführt:

Code: Alles auswählen

  Affe := TApeFactory.CreateApe(atChimp);
  Affe.print;
  ReadLn;   
auf der Console fehlt nun das WriteLn des Constructors.
Chimp
Aufgefallen ist mir das in meinem Projekt beim senden an die serielle Schnittstelle eines Geräts - Objekt war nicht instanziiert.
Ein Breakpoint im Constructor wird vom Debugger auch nicht erreicht.

Das Object, welches ich über die "Factory" übergeben bekomme, habe ich als Bild angehängt.
Geschwärzt bezogen aufs AffenBeispiel:

Code: Alles auswählen

Affe = tChimp{tChimp}   
..
var Affe: TApe = CLASS
Gibt es die Möglichkeit hier auf den Construktor zu verweisen, oder muss ich das mit einer Initialisierungsfunktion umgehen?

Grüße,
ich schau morgen wieder rein.
Dateianhänge
FactoryExample.zip
(2.53 KiB) 79-mal heruntergeladen
Affenbeispiel.png
Affenbeispiel.png (15.87 KiB) 4217 mal betrachtet

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Factory - Class Create wird nicht ausgeführt

Beitrag von theo »

Deklariere mal bei TApe auch einen Konstruktor:

Code: Alles auswählen

  TApe = class
  public
    procedure print;virtual;abstract;
    constructor Create; virtual; abstract;
  end;  
Dann

Code: Alles auswählen

  TChimp = class(TApe)
  public
    procedure Print;override;
    constructor Create; override;
  end;  

schoschy
Beiträge: 26
Registriert: Di 18. Okt 2022, 15:46

Re: Factory - Class Create wird nicht ausgeführt

Beitrag von schoschy »

Funktioniert, danke dir!

Antworten