Hallo!
Kann man eine Klasse (kein Objekt!) als Parameterverwenden um dann Objekte dieser Klasse zu erzeugen?
Ein Beispiel:
Die Klasse
TFahrzeug beinhaltet ein Feld
FReifen: TReifen. Je nach konkreter Unterklasse von
TFahrzeug, z.B.
TAuto oder
TMofa, soll FReifen mit einer entsprechenden Unterklasse von TReifen erstellt werden:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| type TReifen = class(TObject) ... end;
TAutoReifen = class(TReifen) ... end;
TMofaReifen = class(TReifen) ... end;
TFahrzeug = class(TObjec) protected FReifen: TReifen; FReifenKlasse: TKlass;
procedure SetReifenKlasse; virtual; public constructor Create; end;
TAuto = class(TFahrzeug) protected procedure SetReifenKlasse; end;
TMofa = class(TFahrzeug) protected procedure SetReifenKlasse; end;
implementation
procedure TAuto.SetReifenKlasse; begin FReifenKlasse := TAutoReifen; end;
procedure TMofa.SetReifenKlasse; begin FReifenKlasse := TMofaReifen; end;
constructor Create; begin SetReifenKlasse;
FReifen := FReifenKlasse.Create(...); end; |
Die Unterklassen TAuto und TMofa legen also jeweils in SetReifenKlasse fest, von welchem Typ die Reifen sein sollen. Der allgemeine Konstruktor von TFahrzeug kann dann mit FReifenKlasse arbeiten...
So wie dort steht geht es nicht. Aber gibt es einen Weg wie es dennoch funktioniert?
Mir ist klar, dass man das Ganze auch so lösen kann, dass man statt
SetReifenKlasse eine Methode
CreateReifen einführt die dann in TAuto und TMofa überschrieben wird damit dort die Reifen vom richtigen Typ erzeugt werden. Aber das ist ja nur ein Beispiel und nicht die Frage. Die Frage, ob es ganz allgemein möglich ist eine Klasse als Variable zu nutzen..
Besten Dank
Ares