Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: overload, override, virtual, inherited

  Alt 23. Okt 2003, 18:05
Moin Char,

Zitat von Char:
Das versteh ich eben nicht, ich dachte wenn ich TEigeneKlasse.create aufrufe, wird einfach TObject.create aufgerufen, selbst wenn ich was eigenes in TEigeneKlasse.create geschrieben habe.

Was macht nun:

Delphi-Quellcode:
procedure TEigeneKlasse.create;
begin

Hallo := 123; { <- nur als Beispiel jetzt }

end;
Ruft diese Prozedur
a) nur TObject.create; auf,
b) erstellt sie eine Instanz von TEigeneKlasse und ändert den Inhalt der Variablen,
c) erstellt sie KEINE Instanz von TEigeneKlasse, ändert aber den Inhalt der Variablen (macht keinen Sinn oder?),
d) ändert es den Inhalt der Variablen und ruft TObject.create auf?

Ich dachte eben a)...
a)
Nein, Du rufst hier nirgends die ererbte Methode des Vorfahren auf
b)
Nein, der Konstrukter erstellt niemals eine Instanz seiner eigenen Klasse, sondern wird zum initialisieren beim Bilden einer Instanz aufgerufen
c)
Jain, sie erstellt keine Instanz (Ja) und ändert den Inhalt der Variablen nicht (Nein)
d)
Jain, der Variableninhalt wird geändert (Ja), TObject.Create wird nicht aufgerufen (Nein)

Der Konstruktur dient einzig und allein dazu eventuell erforderliche Initialisierungen vorzunehmen, wenn man eine Instanz der Klasse bildet.
Da dies auch für die Vorfahrklasse gilt, sollte man hier auch, mittels inherited, den Konstruktor des Vorfahren aufrufen. Dies geschieht nicht automatisch.

Sollte es nicht erforderlich sein, dass Deine abgeleitete Klasse etwas initialisiert, brauchst Du auch keinen Konstruktor anzugeben. Dann wird automatisch der des Vorfahren genommen, wenn Du eine Instanz bildest.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat