Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Nov 2017
Wozu die ganzen "Is"-Abfragen in FlaecheBerechnen, wenn eine TFigur-Instanz übergeben wird? Die angesprochene Methode ist virtuell, es sollte also immer die passende ausgeführt werden.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Nov 2017
Ja, wieso denn nicht? Der Cast wäre unnötig gewesen, wenn Du die lokale Variable gleich als TTrapez deklariert hättest, aber das wäre ja am Thema vorbei. Du kannst auch beispielsweise in Routinen, die eine TFigur als Parameter entgegennehmen, prüfen, ob es sich um eine spezialisierte Klasse handelt und sie dementsprechend behandeln.
procedure MachWas(Figur: TFigur);
begin
if Figur is...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Nov 2017
MyFigure ist als TFigur deklariert, deshalb kannst Du auch nur dessen Methoden und Eigenschaften direkt nutzen. Für spezifische Sachen musst Du typecasten.
procedure TForm1.btnTrapezClick(Sender: TObject);
var MyFigure : TFigur;
begin
MyFigure := TTrapez.create;
try
MyFigure.SeiteA:=strtofloat(edtSeiteA.text);
MyFigure.SeiteB:=strtofloat(edtSeiteB.text);
...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Nov 2017
Ich habe das Ganze mal umgeschrieben:
type
TFigur = class
private
FSeiteB: Double;
FSeiteA: Double;
protected
function GetFlaeche: double; virtual; abstract;
public
property SeiteA: Double read FSeiteA write FSeiteA;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
19. Nov 2017
Deklariere Deine lokalen Variablen in den Form-Methoden einmal als TFigur. Wenn der Code dann funktioniert, ist das Polymorphie (etwas vereinfacht, aber im Kern richtig).