![]() |
zugriff auf Unterklassen
ich habe zuvor über eine verwandte Frage ein Thema erstellt gehabt und Antwort bekommen (siehe
![]() 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; |
Re: zugriff auf Unterklassen
Da ist ja auch noch die abstrakte Klasse TFunktion "dazwischengeschaltet".
|
Re: zugriff auf Unterklassen
aber das hat doch keinen Einfluss auf den Aufruf des Destruktors (dieFunktion.Destroy)
oder? |
Re: zugriff auf Unterklassen
Wie erwähnt, sollte man Destroy nie direkt aufrufen, sondern .Free
|
Re: zugriff auf Unterklassen
ja das hab ich verstanden :)
das Problem ist nur, dass es vorhin mit einem direkten Aufruf nicht geklappt hat, wobei es im Programm meines Lehers funktioniert. woran das liegt, das habe ich nicht vertanden.. |
Re: zugriff auf Unterklassen
Jede Klasse, bei der der Vorfahr nicht anders angegeben ist, erbt automatisch von TObject. Beim Aufruf von Destroy wird also der destruktor Destroy von TObject ausgeführt. Sollte ich etwas übersehen oder falsch dargestellt haben, korrigiere man mich bitte.
|
Re: zugriff auf Unterklassen
könntest du dann auch sagen, warum es im anderen Programm nicht ging? warum hat er dann dort nicht den Standartdestruktor erkannt? er müsste ihn doch geerbt haben von TObject..
|
Re: zugriff auf Unterklassen
Vielleicht wegen den Klammern?
|
Re: zugriff auf Unterklassen
Zitat:
|
Re: zugriff auf Unterklassen
In diesem Fall hat der Vorfahr aber auch keine eigenen Destruktor
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 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