Einzelnen Beitrag anzeigen

cydo

Registriert seit: 6. Sep 2006
28 Beiträge
 
#1

Hund, Katze und das Klonen von Tieren (OOP-Problem)

  Alt 15. Apr 2008, 14:53
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
  Mit Zitat antworten Zitat