Thema: Delphi zugriff auf Unterklassen

Einzelnen Beitrag anzeigen

cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#1

zugriff auf Unterklassen

  Alt 6. Mai 2008, 17:51
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;
  Mit Zitat antworten Zitat