Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - DAs Überschreiben von Constructor funzt nicht :-(
catweasel - Fr 14.11.03 23:36
Titel: DAs Überschreiben von Constructor funzt nicht :-(
Hi,
Hab da ein OOP Problem: Ich deklariere eine Klasse (etwas vereinfacht):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type test = class(TWincontrol) constrctor create (AOwner: TComponent; xalign,yalign : integer);override;
constrctor create (AOwner: TComponent; xalign,yalign : integer); begin left := xalign; top := yalign; end; |
Was ich also machen möchte ist folgendes: Ich möchte ein Objekt vom Typ
TWincontrol mit einem neuen Konstruktor ausstatten, weil ich diesem Objekt ein paar Werte beim createn mitgeben will. Nämlich die Position an der es erscheinen soll.
Nun bekomme ich die Fehlermeldung:
| Zitat: |
| "Create differs from previous declaration" |
Hmmm, na gut. Das ist wohl tatsächlich der Fall, denn in dem Ursprünglichen Konstruktor von create sind ja keine Parameter
xalign, oder
yalign vorhanden. Soweit ist das für mich noch nachvollziehbar. ABER: In der Ursprünglichen Deklaration von TWincontrol ist der Constructor create als
virtual vereinbart.
Warum darf ich ihn trotzdem nicht überschreiben? Oder anders gefragt: Was muss ich machen um einem bestehendem Konstruktor Parameter hinzuzufügen?
Hoffe hab die Frage nich zu doof ausgedrückt...
Catweasel
Moderiert von
Tino: Delphi-& Quote-Tags hinzugefügt
UC-Chewie - Fr 14.11.03 23:46
Bei nem Konstruktor braucht du override nicht anzugeben.
ErnestoChe - Sa 15.11.03 00:26
Hi,
wenn du eine virtuelle Methode bzw. einen virtuellen Konstruktor überschreibst muss die Parameterliste mit der der Vorfahrklasse übereinstimmen.
Wenn du die Parameterliste erweitern willst musst du ganz einfach einen neuen Konstruktor festlegen ohne die direktive
override. Du kannst den Konstruktor auch beliebig benennen. Du kannst dann in diesem Konstruktor immer noch den Konstruktor Create vom Vorfahren aufrufen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| constructor test.Create(AOwner: TComponent; xalign, yalign: integer); begin inherited Create(AOwner)
end; |
MFG
- Ernesto -
catweasel - Sa 15.11.03 01:01
DAnke für den Tipp :D
Catweasel
barfuesser - Mo 17.11.03 09:46
Falls Du den Konstruktor genau so wie in der Vorfahrklasse benennen möchtest, empfiehlt es sich die Direktive reintroduce zu verwenden, da ansonsten immer lästige Hinweise angezeigt werden.
barfuesser
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!