Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit virtuellem Kostruktor (https://www.delphipraxis.net/34088-probleme-mit-virtuellem-kostruktor.html)

barnti 17. Nov 2004 11:14


Probleme mit virtuellem Kostruktor
 
Hallo,

ich möchte meine Klassen mit Hilfe des Parameters im virtuellen Konstruktor erzeugen.
folgendes Beispiel:
Delphi-Quellcode:
unit MyInterface;

interface
uses
  Dialogs;
type
TApeClass = class of TApe;
TApeType = TApeClass;

  TApe = class (TObject)
  public
    class function CreateApe(const ApeType : TApeType): TApe;
    procedure Scream; virtual;
  end;

  TGorrila = class (TApe)
  public
    procedure Scream; override;
  end;
 
  TOrangutan = class (TApe)
  public
    procedure Scream; override;
  end;
 
  TChimp = class (TApe)
  public
    procedure Scream; override;
  end;
 
implementation

{- TApe.CreateApe }
{
************************************* TApe *************************************
}
{- TApe.CreateApe }
class function TApe.CreateApe(const ApeType : TApeType): TApe;
begin
  Result := TApeType.Create;
end;

{- TApe.Scream }
procedure TApe.Scream;
begin
end;

{- TApe.Scream }
{- TGorrila.Scream }
{
*********************************** TGorrila ***********************************
}
{- TGorrila.Scream }
procedure TGorrila.Scream;
begin
  Showmessage('I am a gorrila!')
end;

{- TOrangutan.Scream }
{
********************************** TOrangutan **********************************
}
{- TOrangutan.Scream }
procedure TOrangutan.Scream;
begin
  showmessage('I am an Orangutan!');
end;

{- TChimp.Scream }
{
************************************ TChimp ************************************
}
{- TChimp.Scream }
procedure TChimp.Scream;
begin
  Showmessage('I am a Chimp!');
end;

end.

//Aufruf im Programm:
...
var
  Ape: TApe;
begin
  Ape:= TApe.CreateApe(TChimp);
  Ape.Scream;
end;
So wird immer TApe.Scream aufgerufen... Was mache ich falsch?

jim_raynor 17. Nov 2004 11:17

Re: Probleme mit virtuellem Kostruktor
 
Result := TApeType.Create;

ist falsch.

Du solltest statt dessen:

Result := ApeType.Create;

schreiben.

barnti 17. Nov 2004 11:21

Re: Probleme mit virtuellem Kostruktor
 
:wall:

oouuuuhhh!

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz