Autor Beitrag
jeronimo
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 21.07.11 18:05 
Hiho,

kann mir jmd sagen wieso ich hier mit 'Abstract error' abgespeist werde?

ausblenden volle Höhe 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; virtualabstract;
  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.


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Do 21.07.11 18:13 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type
  ChildClass = class(BaseClass)
  published
    procedure ChildProc; override;
  end;


und es sollte gehn

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht

Für diesen Beitrag haben gedankt: jeronimo
jeronimo Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.