Klassen und ihre Implementierung
-
Ich habe das so verstanden, dass er etwas im Stil von
class TMain : public TForm, public TCode
machen will
-
Hallo
aber nicht wenn er so auf den Code-Teil des Forms zugreifen will
Redhawk schrieb:
Form1->Code...bis bald
akari
-
Nein. Nix Mehrfachvererbung.
Wenn ich dann die Instanze im "Form1->OnCloseQuery"-Event durchdelete m_code;lösche, dürfte das doch genügen? Weiß zumindest nicht wo der Destructor von TForm zu finden ist. Brauche ich sicher auch gar nicht.
Danke schon mal für die schnelle Hilfe.
-
Hallo
@ Redhawk : bitte niemals OnCreate oder OnDestroy benutzen. Stattdessen Konstruktor und Destruktor benutzen.
Den TForm-Destruktor mußt du noch selber hinschreiben, muß so aussehen :void __fastcall ~TForm1();bis bald
akari
-
Alles klar.
Danke dir.Bis bald.
-
Wenn ich die Mehrfachvererbunf nutze dann kann ich grundsätzlich mit
Form1->CodeGrün...
Form1->CodeRot...oder sonstewas darauf zugreifen und das sind PublicMethoden der Klasse TCode
Oder habe ich das jetzt komplett falsch verstanden.
-
Hallo
ja aber das war so nicht vom OP gewollt. Wär ich auch nie drauf gekommen ,das der OP Mehrfahcvererbung hätte haben wollen... meine Lösung (die der OP ja auch bestätigt hat) ist mir doch aufgrund der Frage viel naheliegender.
bis bald
akari
-
Hallo. Habe doch noch eine Frage.
Konnte eben erst testen.
Ich kann die Klasse jetzt durchForm1->Code->...aufrufen.
Wenn ich das Programm starte und etwas in eine Variable dieser Klasse schreiben möchte, gibt es eine Fehlermeldung.
Ist auch logisch. Wurde ja noch kein Speicher reserviert.
An welcher Stelle muss ich nun folgende Zeile einfügen.m_code = new TCode;Im Konstructor müsste ich noch eine TComponent mit übergeben, geht da auch NULL?
-
Hallo
da du nicht veraten hast was denn TCode überhaupt macht, von welcher Klasse es abgeleitet ist oder was der Parameter des Konstruktors bedeutet, kann ich da nur allgemein sagen :
Ich geh davon aus, das du von TComponent abgeleitet hast und der Parameter also der von der VCL vorgegebene TComponent Owner* ist. In diesem Fall kannst du durchaus NULL übergeben, dnn bist du selber für das Löschen der Instanz verantwortlich, zum Beispiel im Destruktor.
Wenn du aber zum Beispiel this angibst, ist die Fenster-Instanz selber für das Löschen der Code-Instanz verantwortlich, wenn das Form gelöscht wird. Dann braucht du im Konstruktor nichts manuell löschen.bis bald
akari
-
In der TCode Klasse sind nur selbst geschriebene Funktionen enthalten. Ich benutze dort keinerlei Objekte. Ist reines c. Mit der TComponent meinte ich den Konstruktor des Formulars. Ich war halt der Meinung, dass ich in den Konstruktor des Formulars
void __fastcall TForm::TForm(owner) { m_code = new TCode; }schreiben müsse, damit ich die Variable im Destruktor wieder richtig löschen kann. Jedoch ist dieses "owner" vom Typ TComponent, bzw. von dieser Klasse. Und wenn ich NULL für "owner" übergeben möchte, meckert er rum.
Mittlerweile habe ich mir Funktionen geschrieben, die dann die verschiedenen Funktionen der TCode-Klasse aufrufen. Somit kann ich auch immer über Form1->... darauf zugreifen. Ist nicht ganz so schön, aber funst. Möchte aber trotzdem wissen, wie das sauber zu lösen geht.
-
Hallo

Wenn du in deiner TCode-Klasse keinen eigenen Konstruktor-Parameter vom Typ TComponent hast, was hat denn das dann mit der Klasse TForm und desen Instanz zu tun? Wo willst du du welchen Owner (auf 0) setzen?
Der Owner des Forms selber beeinflußt dein m_code nicht im geringsten, den solltest du weder verändern noch an untergeordnete Objekte weitergeben.bis bald
akari
-
Der Konstruktor von TForm existiert doch bereits im public-Teil. Ist wahrscheinlich Standart:
. . . public: __fastcall TForm1 (TComponent* Owner); . . .Wenn ich nun im Konstructor etwas eintragen möchte, schreibe ich doch:
__fastcall TForm1::TForm1(Keine Ahnung) { . . . }
-
Hallo
nein du darfst die Definition Standard-Konstruktor von TForm nicht verändern. Dafür gibt es auch keinen Grund! Was willst du denn damit bezwecken?
Du darfst der Implementation des Konstruktor etwas hinzufügen, oder die Initialisierungsliste erweiteren.
bis bald
akari
-
Akari, kümmere dich wieder um die anderen Beiträge. Ich bin noch nicht so weit. Muss mich erst mal wieder etwas mehr belesen. Trotzdem danke für deine Geduld :(.
-
-
Super, Danke.
Jetzt kann ich mein Wissen aus dem Studium wieder auffrischen :).