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.