Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Olli73,
22. Mai 2017
procedure Test;
var
A: TMyParent;
begin
A := TMyChild.Create;
try
A.Something;
finally
A.Free;
end;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Olli73,
22. Mai 2017
Weil nicht virtual benutzt wurde.
Lies dir nochmals genau die Antworten durch.
Der Unterschied ist, ob zur Laufzeit die Methode des echten Typs (ggf. Nachfahren) oder die des Variablentyps aufgerufen wird
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Olli73,
22. Mai 2017
Das inherited hat damit nicht direkt was zu tun. Damit sagst du nur, ob und an welcher Stelle die Methode des Vorfahren aufgerufen wird, was man in der Regel will, um nicht alles neu implementieren zu müssen bzw. bei Änderungen alle Nachfahren anfassen zu müssen.
Das Virtual bedeutet nur, dass das Programm zur Laufzeit prüft ob es in obigem Beispiel wirklich ein TObject (so ist die Variable...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Olli73,
22. Mai 2017
var
AObj: TObject;
begin
AObj := TMyObj.Create; // hier gibst du eh konkret an, ob ein TMyObj oder ein TObject oder sonstwas erstellt werden soll, auch wenn die Variable als TObject deklariert ist
...
AObj.Destroy; // bzw. Free; // ohne das virtual würde hier der Destructor von TObject aufgerufen, mit virtual wird korrekterweise der von TMyObj aufgerufen
end;