Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#18

AW: Übung Polymorphie

  Alt 20. Nov 2017, 16:01
Statt diesem
Delphi-Quellcode:
procedure TForm1.btnTrapezClick(Sender: TObject);
var MyFigure : TFigur;
begin
  MyFigure := TTrapez.create;
  try
    MyFigure.SeiteA:=strtofloat(edtSeiteA.text);
    MyFigure.SeiteB:=strtofloat(edtSeiteB.text);
    TTrapez(MyFigure).Hoehe := 20; // Um die Hoehe ansprechen zu können ist ein Cast notwendig
    lblErg.caption:=floattostr(MyFigure.BerechneFl);
  finally
    MyFigure.Free;
  end;
end;
würd' ich lieber das machen:
Delphi-Quellcode:
procedure TForm1.btnTrapezClick(Sender: TObject);
var MyFigure : TTrapez;
begin
  MyFigure := TTrapez.create;
  try
    MyFigure.SeiteA:=strtofloat(edtSeiteA.text);
    MyFigure.SeiteB:=strtofloat(edtSeiteB.text);
    MyFigure.Hoehe := 20;
    lblErg.caption:=floattostr(MyFigure.BerechneFl);
  finally
    MyFigure.Free;
  end;
end;
Casten würd' ich in soeiner Situation:
Delphi-Quellcode:
function FlaecheBerechnen(Sender: TFigure) : Double;
begin
  if Sender is TTrapez then Result := TTrapez(Sender).BerechneFl
  else
  if Sender is TRechteck then Result := TRechteck(Sender).BerechneFl
  else
  if Sender is TDreieck then Result := TDreieck(Sender).BerechneFl
  else
  if Sender is TFigur then Result := TFigur(Sender).BerechneFl
  else Raise('unbekannte Figur');
end;

// Aufruf:
procedure TForm1.BtnBerechnenClick(Sender: TObject);
begin
  MyFigure := TTrapez.create; // der gewünschte Typ, den könnte man z. B. über 'n TRadioGroup auswählen.
  try
    MyFigure.SeiteA := strtofloat(edtSeiteA.text);
    MyFigure.SeiteB := strtofloat(edtSeiteB.text);
    MyFigure.Hoehe := strtofloat(edtHoehe.text);
    lblErg.caption := floattostr(FlaecheBerechnen(myFigure));
  finally
    MyFigure.Free;
  end;
end;
  Mit Zitat antworten Zitat