Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Proceduren in Klassen (https://www.delphipraxis.net/147667-proceduren-klassen.html)

KahPee 13. Feb 2010 16:43


Proceduren in Klassen
 
Hallo,

ich fange gerade an in Delphi mit Klassen zu arbeiten. Ich möchte Objekte zeichnen und diese Objekte auch abspeichern. Als erstes habe ich mir die nötigen Klassen deklariert:

Delphi-Quellcode:
Tfigure=class(Tobject)            
    Typ: Tobjecttyp;
    Penwidth: Integer;
  end;


  Tline=class(Tfigure)
    start: Tpoint;
    finish: Tpoint;
    procedure draw; //diese Prozedur zeichnet eine Linie
  end;

  Tcircle=class(Tfigure)
    mid: Tpoint;
    point: Tpoint;
    procedure Draw; //diese Prozedur zeichnet einen Kreis
  end;

  List: array of Tfigure;
Jetzt werden Daten in die Liste geladen:
Delphi-Quellcode:
list[1]:=Tcircle.create;
list[2]:=Tline.create;
Ich möchte nun das bei:
list[1].draw; ein Kreis gezeichnet wird
und bei
list[2].draw; eine Linie

Würde das bei dem obigen Prinzip klappen oder würden da Probleme wegen der Vererbung auftreten?

mfg KahPee

freak4fun 13. Feb 2010 16:52

Re: Proceduren in Klassen
 
Da gibt es keine Probleme, erst wenn TLine von TCircle oder umgekehrt erbt.
Edit: Neutral General hat recht. :(

Nicht vergessen:
Delphi-Quellcode:
SetLength(list, 3);
list[1]:=Tcircle.create;
list[2]:=Tline.create;
Und:
Delphi-Quellcode:
list[1].free;
list[2].free;
;)

Neutral General 13. Feb 2010 16:54

Re: Proceduren in Klassen
 
Du musst Draw auch in TFigure deklarieren und als virtuell markieren. Sonst funktioniert das nicht:

Delphi-Quellcode:
Tfigure=class(Tobject)            
    Typ: Tobjecttyp;
    Penwidth: Integer;
    procedure draw; virtual; abstract;
  end;


  Tline=class(Tfigure)
    start: Tpoint;
    finish: Tpoint;
    procedure draw; override; //diese Prozedur zeichnet eine Linie
  end;

  Tcircle=class(Tfigure)
    mid: Tpoint;
    point: Tpoint;
    procedure Draw; override; //diese Prozedur zeichnet einen Kreis
  end;
Jetzt funktioniert das


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz