Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Polymorphismus-Problem
Spaceguide - So 09.04.06 21:43
Titel: Polymorphismus-Problem
Angenommen ich leite z.B. folgende Klassen ab:
Delphi-Quelltext
1: 2: 3: 4:
| TShape = class TRectangle = class(TShape) TEllipse = class(TShape) etc. |
und übergebe eine Instanz von TRectangle an eine Prozedur
procedure DoSomething(aShape : TShape);
Delphi-Quelltext
1: 2: 3: 4:
| var clone : TShape; begin clone := aShape.ClassType.Create; ??? end; |
wie erzeuge ich eine weitere Instanz der übergebenen Klasse, also z.B. ein weiteres TRectangle, wenn aShape vom Typ TRectangle ist (ohne Fallunterscheidung per if/case/is)?
Allesquarks - So 09.04.06 22:15
entweder du legst eine Klassenreferenz in jede Instanz deiner Klassen myclassvariable: class of TShape
oder du erzeugst virtuelle methoden in den Klassen, da diese dann dynamisch, das heißt jede Klasse kann ihre eigene Aufrufen, dann weißt du in der Methode die Klasse die du erzeugen möchtest.
Spaceguide - So 09.04.06 23:41
Diese Klassenreferenz ist doch schon durch ClassType gegeben. Mit
Delphi-Quelltext
1:
| clone := TShape(aShape.ClassType.Create); |
bekomme ich tatsächlich eine weitere Instanz der übergebenen Klasse. Ich muss nur einfach noch von TObject auf TShape casten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!