FinnO - Fr 01.10.10 15:57
Titel: Klasse kopieren statt wildes gepointer.
Moin,
habe mich heute im Informatikunterricht erstmals mit einem etwas verrückten Problem auseinandersetzen müssen:
Folgende Situation - wir haben eine wunderschöne pupseinfache Basisklasse, die ich hier unten mal eben aufgeschrieben habe. Ich würde jetzt recht gerne eine Kopie eines Objekts einer Klasse basteln.
Delphi-Quelltext
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:
| type TZahl = Class private FValue : Integer; public property Value : Integer read FValue write FValue; constructor create(AValue : Integer); overload;
procedure Display(ed : TEdit); end;
implementation
constructor TZahl.Create(AValue : Integer); begin inherited create; FValue := AValue; end;
procedure TZahl.Display(ed : TEdit); begin ed.Text := IntToStr(FValue); end; end. |
bekannt ist ja, dass der Compiler im Hintergrund gerne mal herumpointert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var a, b : TZahl; begin a := TZahl.Create(25); b := a; b.Value := 30;
a.Display(edA); b.Display(edB); end; |
Die Folge ist: in beiden Edits steht 30. Das liegt daran, dass im Hintergrund still und heimlich das andere Objekt referenziert wird. Wie kann ich jetzt eine Klasse sinnvoll kopieren, das heißt, ein Objekt eins zu eins an anderer Stelle einsetzen, dann aber alleinstehend bearbeiten, ohne erst einen anderen überladenen Constructor oder wasweißich selbst zu basteln?
LG