![]() |
Probleme mit virtuellem Kostruktor
Hallo,
ich möchte meine Klassen mit Hilfe des Parameters im virtuellen Konstruktor erzeugen. folgendes Beispiel:
Delphi-Quellcode:
So wird immer TApe.Scream aufgerufen... Was mache ich falsch?
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; |
Re: Probleme mit virtuellem Kostruktor
Result := TApeType.Create;
ist falsch. Du solltest statt dessen: Result := ApeType.Create; schreiben. |
Re: Probleme mit virtuellem Kostruktor
:wall:
oouuuuhhh! Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz