Zum Inhalt springen

Verständnissfrage - Instanzen


given_to_fly

Empfohlene Beiträge

Hallo.

Ich habe mal eine kleine Frage zu Instanzen im Programm erzeugen.

Ich habe eine grafische Oberfläche auf der man einen Button drücken kann.

In der Methode (ButtononClick) erzeuge ich eine Instanz meiner selbstdefinierten Klasse abc.

also

 

abc klasse_inst;

int i , b , k;

So nun fülle ich ein paar protected werte mit den methoden aus meiner klasse.

Wenn ich den button erneut drücke erzeugt er ja wieder eine instanz namens klasse_inst, aber diese ist doch schon definiert oder ?

Oder verliert er diese wieder nach verlassen der Methode ButtononClick ?!

Gut die Werte sind ja in der Klasse , aber d.h. ich könnte niemals werte speichern wenn ich keine eigene klasse definiere, da er ja alle werte wieder verliert ?

Oder merkt der Compiler, das die Instanzt schonmal definiert worden ist und löscht die alte und erzeugt eine neue ?!

Ich verstehe das nicht so ganz....

Denn sonst würde der Compiler ja eine doppeldefiniton anmeckern.

Hoffe ihr wisst was ich meine ... :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich bin mir da nicht so ganz sicher. Mach doch einfach einen zweiten Button der Methoden der Klasse aufruft und Werte wieder ausgibt. Am besten machst Du beim drücken des ersten Buttons eine Abfrage welchen Wert er speichern soll. Dann hast Du verschiedene Werte in der Klasse.

Warum machst Du die Instanz nicht beim Start des Programms/ Formulars auf?

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von palvoelgyi

Hallo,

ich bin mir da nicht so ganz sicher. Mach doch einfach einen zweiten Button der Methoden der Klasse aufruft und Werte wieder ausgibt. Am besten machst Du beim drücken des ersten Buttons eine Abfrage welchen Wert er speichern soll. Dann hast Du verschiedene Werte in der Klasse.

Warum machst Du die Instanz nicht beim Start des Programms/ Formulars auf?

Frank

Hi.

Weil ich die Instanz erst beim Button drücke benötige :)

Die Werte werden ja problemlos in der Klasse gespeichert , das ist nicht das Problem :) und warum er die behält ist auch klar...

Ich frage mich nur wie er das mit den Instanzen handelt, da die Instanz ja schon existiert...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht verstehe ich dich nicht richtig, aber onClick ist ja eine Funktion, die irgendwie so ähnlich aussehen muß:

void onClick (...)

{

meineKlasse test;

//...

}

Wenn Du also auf deinen Button klickst, dann wird diese Funktion ausgefüht und Deine protected-Werte gefüllt. Wenn Du jetzt nochmal auf den Button klickst, dann hast Du folgendes NICHT bedacht:

test ist lokal und wird vom Stack wieder abgeräumt, sobald die Funktion beendet wurde. Das bedeutet, Du kannst nicht wirklich etwas speichern und jedes mal wird test angelegt und am Ende wieder abgeräumt.

Warum machst Du in Deiner Formularklasse, zu der auch onClick gehört nicht eine private oder sonstwas Variable meineKlasse *test.

Dann kannst Du in onClick mit test = new meineKlasse(); eine Instanz Deiner Klasse erzeugen. Wenn Du jetzt ölfter auf den Button klickst erzeugst Du auch mehrere Instanzen, nur das Du nur noch auf die letzte Instanz zugreifen kannst. (Achtung Speicherloch, also aufpassen!!!)

HTH

Jan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um es jetzt einmal zu verdeutlichen hier mein Original Code


//////////////////////////////////////////////////////////////////////

// L O A D - B U T T O N  - P U S H E D

//////////////////////////////////////////////////////////////////////

void CRaffDlg::OnButtonLoad() 

{


   // Datendeklaration

   own_save	class_w;

   int i = 6;

   class_w.set_werte(i);



}

 

Natürlich wird der i wert mit etwas anderem gefüllt, was ich aus anderen programmteilen ermittele :)

Nun wenn ich auf den Button drücke wird die Instanz ja erzeugt und der Wert in der Klasse own_save mit der instanz class_w gespeichert.

Wenn ich jetzt nochmals auf den Button klicke ist die Instanz ja noch da oder refernziert er wieder auf den name class_w und merkt , das ich schon vorher mal werte auf die klasse über die instanz geschoben habe und hat dann noch die werte im speicher ?!

Oder wird eine neue Instanz erzeugt, aber woher hat er dann die Werte die ich vorher in die Atrribute (protected) der Klasse geschoben habe...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist so, wie ich sagte. Dein Objekt class_w ist lokal und wird auf dem Stack angelegt. Nach Beendigung wird das Objekt abgeräumt.

Anders sieht es aus, wenn Du Dein Objekt den Zusatz static mitgibst. Dann funktioniert es so, wie Du es Dir vorstellst.

Oder wird eine neue Instanz erzeugt, aber woher hat er dann die Werte die ich vorher in die Atrribute (protected) der Klasse geschoben habe...

Bist Du sicher, daß die Werte noch vorhanden sind?

HTH

Jan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Orffi

Bist Du sicher, daß die Werte noch vorhanden sind?

HTH

Jan

ich habe jetzt von hand nochmal alle vorgänge durch debugged...

Und du hast recht, die werte waren weg, es ist mir aber nie aufgefallen, da ich noch nicht so weit bin das ich wieder auf die werte zurückgreife, da ich die werte in der gleichen methode "CRaffDlg::OnButtonLoad" wieder auslese. ( Brauche Sie später aber wieder)

Dann werde ich die Instanz mit der Variabele jedes mal neu erzeugen ;)

Es kann ja maximal 3 mal auf den button gekilckt werden ;) das wird schon nicht den speicher überlasten

Many thx , damit hast du mir extrem weitergeholfen und damit verstehe ich den zusammenhang mit Instanzen und lokalen Definitionen :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...