Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Abstract error bei Prozedur aus eigener Klasse
jeronimo - Do 21.07.11 18:05
Titel: Abstract error bei Prozedur aus eigener Klasse
Hiho,
kann mir jmd sagen wieso ich hier mit 'Abstract error' abgespeist werde?
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: 26: 27: 28: 29: 30: 31:
| unit test;
interface
type BaseClass = class protected procedure ChildProc; virtual; abstract; published procedure Go(); end;
type ChildClass = class(BaseClass) published procedure ChildProc; end;
implementation
procedure BaseClass.Go(); begin Self.ChildProc() end;
procedure ChildClass.ChildProc; begin writeln('bla'); end;
end. |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| program ptest; {$APPTYPE CONSOLE}
uses SysUtils, test in 'test.pas';
var bla: ChildClass;
begin try bla := ChildClass.Create(); bla.Go();
except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end;
end. |
Die Idee war es, eine Hauptklasse zu haben, von der die abgeleiteten Klassen sich teilweise anders verhalten, jedoch die gleiche Struktur haben, und auch immer gleich aufgerufen werden (daher das Go() in der Hauptklasse).
Vielen Dank und viele Grüsse,
Marki
glotzer - Do 21.07.11 18:13
Delphi-Quelltext
1: 2: 3: 4: 5:
| type ChildClass = class(BaseClass) published procedure ChildProc; override; end; |
und es sollte gehn
jeronimo - Do 21.07.11 18:18
Funzt,
aber versteh ich nicht ganz, denn die höhere Klasse ist eh abstrakt, von daher gibt's nix zu overriden...
Trotzdem *danke*
jaenicke - Do 21.07.11 18:33
Doch, eben die abstrakte Methode. Wenn du das nicht dazuschreibst, deklarierst du eine neue Methode ohne die der Elternklasse zu implementieren.
Du hast dann also immer noch eine abstrakte Methode in deiner Klasse und kannst ein solches Objekt deshalb nicht erzeugen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!