Hallo,
ich habe hier grad ein Problem mit folgendem Code
Delphi-Quellcode:
type
TTier = class(TObject)
Name: String;
constructor Create;virtual;
end;
THund = class(TTier)
constructor Create;override;
end;
TKatze = class(TTier)
constructor Create;override;
end;
TKlonerei = class
class function Clone(Tier: TTier): TTier;
end;
constructor TTier.Create;
begin
Name := 'Namenloses Viech';
end;
constructor THund.Create;
begin
Name := 'Hund';
end;
constructor TKatze.Create;
begin
Name := 'Katze';
end;
class function TKlonerei.Clone(Tier: TTier): TTier;
begin
result := Tier.Create;
end;
var
Hund: THund;
Katze: TKatze;
KlonTier: TTier;
begin
Hund := THund.Create;
Katze := TKatze.Create;
KlonTier := TKlonerei.Clone(Hund);
Klontier.name := 'geklonter '+Klontier.name;
writeln('Hund ist ein '+Hund.Name);
writeln('Katze ist eine '+Katze.Name);
writeln('KlonTier ist ein '+Klontier.Name);
end.
Ausgabe:
Delphi-Quellcode:
Hund ist ein geklonter Hund
Katze ist eine Katze
KlonTier ist ein geklonter Hund
gewünschte Ausgabe:
Delphi-Quellcode:
Hund ist ein Hund
Katze ist eine Katze
KlonTier ist ein geklonter Hund
D.h. die Clone-Prozedur in der Klonerei schlägt fehl, ich könnte natürlich jetzt folgendes schreiben:
Delphi-Quellcode:
class function TKlonerei.Clone(Tier: TTier): TTier;
begin
if Tier.class=THund then result := THund.Create;
if Tier.class=TKatze then result := TKatze.Create;
end;
aber wenn ich 1000 Tiere hab, dann ist das doch etwas mühsam. Wie geht das einfacher?
Gruß,
Dennis