Objekt kopieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Objekt kopieren

Beitrag von Komoluna »

Liebes Forum,

ich habe in meinem Programm folgende Klassenstruktur:

Code: Alles auswählen

TParent = class
public
  constructor Create; virtual;
  procedure CopyFrom(aObject: TParent); virtual;
end;
 
TChild1 = class(TParent)
public
  constructor Create; override;
  procedure CopyFrom(aObject: TParent); override;
end;
 
TChild2 = class(TParent)
public
  constructor Create; override;
  procedure CopyFrom(aObject: TParent); override;
end;
 
{etc.}
nun habe ich eine Instanz von TChildX, die ich kopieren möchte

Code: Alles auswählen

a:=GetEntityType('Ship1');
b:={???}; //<- Mein Problem
b.CopyFrom(a);
Also kurz: Ich habe ein Objekt gegeben, und möchte ein 2. Objekt erstellen, mit der selben Klasse wie Objekt1.

Wenn ich

Code: Alles auswählen

b:=a.ClassType.Create;
versuche wird zwar ein Objekt vom selben Typ wie a erstellt, aber dessen Konstruktor nicht aufgerufen. Wie auch immer das Funktionieren soll...
Ich bin mit meinem Pascal am Ende.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

martin_frb
Beiträge: 588
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Objekt kopieren

Beitrag von martin_frb »

Das sollte gehen. Der virtuelle Konstruktor ist ja erst ab TParent bekannt.

Code: Alles auswählen

 
b:= TParent(a.ClassType).Create;
 

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Objekt kopieren

Beitrag von Komoluna »

geht nicht, gibt n SIGSEGV...

aber das hier scheint zu gehen:

Code: Alles auswählen

TParentClass = class of TParent;
{...}
b:=TParentClass(a.ClassType).Create;
MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

martin_frb
Beiträge: 588
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Objekt kopieren

Beitrag von martin_frb »

Ouch, ja. Mein Fehler. Es muss natürlich ein Class type sein

Antworten