ich habe zuvor über eine verwandte Frage ein Thema erstellt gehabt und Antwort bekommen (siehe
http://forum.delphi-treff.de/showthread.php?t=23607)
aber ich habe jetzt ein ähnliches Programm untersucht (von meinem Lehrer)
und habe gesehn, dass es bei diesem Programm geht
die klasse Steuerung kann hier einfach dieFunktion.Destroy() aufrufen
warum kann man das jetzt?
(ich könnte auch den vollständige Programmcode senden, ist halt etwas lang)
Delphi-Quellcode:
type TFkt_Typ = (GERADE, PARABEL, SINUS);
type
TSteuerung = class;
TF_Main = class(TForm)
RG_fkt_typ: TRadioGroup;
R_gerade: TRadioButton;
r_parabel: TRadioButton;
r_sinus: TRadioButton;
E_a: TEdit;
E_b: TEdit;
E_c: TEdit;
E_min: TEdit;
E_max: TEdit;
L_a: TLabel;
L_b: TLabel;
L_c: TLabel;
L_min: TLabel;
L_max: TLabel;
B_berechne: TButton;
B_ende: TButton;
E_flaeche: TEdit;
L_Flaeche: TLabel;
procedure B_endeClick(Sender: TObject);
procedure B_berechneClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
strict private
dieSteuerung: TSteuerung;
function getFloatFromEdit(Edit: TEdit; error_msg: String): real;
public
procedure zeigeErgebnis(flaeche: real);
function gibFunktionsTyp(): TFkt_Typ;
function gibXMin(): real;
function gibXMax(): real;
function gibParA(): real;
function gibParB(): real;
function gibParC(): real;
end;
TSteuerung = class
strict private
dieOberflaeche: TF_Main;
dieFunktion: TFunktion;
procedure ermittleFlaeche();
public
constructor erzeugeSteuerung(myForm: TF_Main);
procedure tastaturEreignis();
procedure beendeProgramm();
end;
type TFunktion = class abstract
strict protected
a: real;
b: real;
c: real;
xMin: real;
xMax: real;
strict protected
function berechneFunktionswert(x: real): real; virtual; abstract;
strict private
function berechneFlaeche(n: cardinal): real;
public
function berechneFlaeche2(epsilon: real): real;
procedure setzeParameter(pa: real; pb: real; pc: real);
procedure setzeGrenzen(min: real; max: real);
end;
type TGerade = class(TFunktion)
strict protected
function berechneFunktionswert(x: real): real; override;
end;
type TParabel = class(TFunktion)
strict protected
function berechneFunktionswert(x: real): real; override;
end;
type TSinus = class(TFunktion)
strict protected
function berechneFunktionswert(x: real): real; override;
end;
procedure TSteuerung.ermittleFlaeche();
var fkt_typ : TFkt_Typ;
a, b, c : real;
min, max: real;
begin
fkt_typ := dieOberflaeche.gibFunktionsTyp();
case fkt_typ of // erzeuge Funktions-Objekt
GERADE : dieFunktion := TGerade.Create;
PARABEL: dieFunktion := TParabel.Create;
SINUS : dieFunktion := TSinus.Create;
end;
a := dieOberflaeche.gibParA();
b := dieOberflaeche.gibParB();
if fkt_typ <> GERADE then
c := dieOberflaeche.gibParC()
else
c := 0;
min := dieOberflaeche.gibXMin();
max := dieOberflaeche.gibXMax();
dieFunktion.setzeParameter(a, b, c);
dieFunktion.setzeGrenzen(min, max);
dieOberflaeche.zeigeErgebnis(dieFunktion.berechneFlaeche2(0.0000001));
dieFunktion.Destroy; // ??????????????????????????????
end;