AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Übung Polymorphie

Ein Thema von EdAdvokat · begonnen am 19. Nov 2017 · letzter Beitrag vom 20. Nov 2017
Antwort Antwort
Seite 2 von 2     12   
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Übung Polymorphie

  Alt 20. Nov 2017, 14:02
nun wollte ich das ganze vertiefen und habe dazu eine weitere class TTrapez (TDreieck) hinzugefügt. Für die Flächenberechnung wird nun zusätzlich zu SeiteA und SeiteB noch eine Höhe benötigt. Wenn ich nun in meiner Naivität einfach zur geerbten class TTrapez das Feld FHoehe und das Property Hoehe
hinzufüge im Glauben, dass ich zum Geerbten einfach noch die zusätzlich benötigten Felder und Propertys für eine erfolgreiche Programmausführung hätte, habe ich mich gründlich getäuscht, denn er findet die Poperty Hoehe in der Form nicht.
Muss ich also diese Ergänzungen für die Flächenberechnung eines Trapezes in die Basisklasse TFigur aufnehmen damit ich weiter komme?
Eigentlich wollte ich sehen wie es mit der Vererbung klappt, doch so würde ich zwar auch mit dem Ergebnis der Vererbung von der Basisklasse arbeiten.
Schön wäre es, wenn ich mit dem Erbe von TDreieck und den zusätzlich benötigten Feldern arbeiten könnte. Liege ich da völlig falsch?
Wie sollte ich das anstellen.
Anbei die Auszüge aus der unit Berechnung und unit Form:
Delphi-Quellcode:
type TFigur = class(TObject)
  private
    FSeiteA:Double;
    FSeiteB:Double;
  strict protected
    function getBerechneFl:Double;virtual;abstract;
  public
    property SeiteA:Double read FSeiteA write FSeiteA;
    property SeiteB:Double read FSeiteB write FSeiteB;
    property BerechneFl:Double read getBerechneFl;
end;

type TRechteck = class(TFigur)
  strict protected
    function getBerechneFl:Double;override;
 end;

type TDreieck = class(TRechteck)
  strict protected
    function getBerechneFl:Double;override;
 end;

type TTrapez = class (TDreieck)
  private
    FHoehe : Double;
  strict protected
    function getBerechneFl: Double;override;
  public
    property Hoehe :Double read FHoehe write FHoehe;
end;

implementation

{ TRechteck }

function TRechteck.getBerechneFl: Double;
begin
  result:=FSeiteA*FSeiteB;
end;

{ TDreieck }

function TDreieck.getBerechneFl: Double;
begin
  result:=FSeiteA*FSeiteB/2;
end;
{ TTrapez }

function TTrapez.getBerechneFl: Double;
begin
  result:=(SeiteA+SeiteB)/2*Hoehe;
end;

end.
und die Form:
Delphi-Quellcode:
procedure TForm1.btnDreieckClick(Sender: TObject);
var MyFigure: TFigur;
begin
  MyFigure := TDreieck.Create;
  try
    MyFigure.SeiteA:=strtofloat(edtSeiteA.text);
    MyFigure.SeiteB:=strtofloat(edtSeiteB.text);
    lblErg.caption:=floattostr(MyFigure.BerechneFl)
  finally
    MyFigure.Free;
  end;
end;

procedure TForm1.btnEndeClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.btnFlClick(Sender: TObject);
var MyFigure : TFigur;
begin
  MyFigure := TRechteck.Create;
  try
    MyFigure.SeiteA:=strtofloat(edtSeiteA.text);
    MyFigure.SeiteB:=strtofloat(edtSeiteB.text);
    lblErg.caption:=floattostr(MyFigure.BerechneFl);
  finally
    MyFigure.Free;
  end;
end;

procedure TForm1.btnTrapezClick(Sender: TObject);
var MyFigure : TFigur;
begin
  MyFigure := TTrapez.create;
  try
    MyFigure.SeiteA:=strtofloat(edtSeiteA.text);
    MyFigure.SeiteB:=strtofloat(edtSeiteB.text);
    //MyFigure //Problem: findet Hoehe aus TTrapez nicht!
    lblErg.caption:=floattostr(MyFigure.BerechneFl);
  finally
    MyFigure.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  edtSeiteA.text:='';
  edtSeiteB.text:='';
end;

end.
Norbert

Geändert von EdAdvokat (20. Nov 2017 um 14:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 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