WIE? Aus Memberfunktion auf Variable des Konstruktor zugreifen?
-
Hallo,
ich brauche mal Eure Hilfe.
class TEST { public: TEST(); void print(); }; TEST::TEST() { int my_int=1000; }; void TEST::print() { cout<<???????.my_int<<endl; }; int main(int argc, char* argv[]) { TEST *t= new TEST(); t->print(); return 0; };Wie kann ich auf die im Konstruktor definierte Variable my_int, in der Memberfunktion print(); zugreifen um diese auszugeben?
Gruss Matze
-
Du kannst der Klasse nicht nur Memberfunktionen spendieren, sondern auch Elemente:
class TEST { public: TEST() {my_int = 4711;} //schreibt in die Membervariable void print() {cout<<my_int;} //liest Membervariable private: int my_int; };
-
Hey! Warum deklarierst du my_int in der Funktion und nich in der Klasse?
class TEST { public: TEST(); void print(); private: int my_int; }; TEST::TEST() { my_int=1000; }; void TEST::print() { cout<< my_int << endl; }; int main(int argc, char* argv[]) { TEST *t= new TEST(); t->print(); return 0; }Ist doch einfacher oder?

Edit: arghs, zu langsam
-
danke für den Tip aber wie sieht denn die sache aus, wenn ich in der klasse eine
liste verwalten will?also
list<int> my_list
da mekert der compiler, wenn ich die liste direkt in die klasse schreibe,
also habe ich diese in den konstruktor, also stellvertretend for mein int, geschrieben! Möchte ich nun aber über ne print funktion die liste ausgeben,
wie kann ich denn den erzeugten listen-iterator ansprechen?gruss matze
-
Schau mal hier bei dem Beispiel wie das geht, bin jetzt zu faul alles aufzuschreiben^^ ist ansich selbsterklärend :
#include "stdafx.h" #include <iostream> #include <list> using namespace std; class CRaumschiff { public: CRaumschiff (int ID) //Konstruktor mit Wertübergabe { m_ID = ID; cout << "Raumschiff wurde erstellt" << endl; } ~CRaumschiff () //Destruktor { cout << "Raumschiff wurde zerstoert\n"; } void starten () //Funktion starten { cout << "Raumschiff " << m_ID << " gestartet." << endl; } //Variablendeklaration private: int m_ID; }; int _tmain(int argc, _TCHAR* argv[]) { // Variablen list<CRaumschiff*> lSchiffe; list<CRaumschiff*>::iterator i; int Anzahl = 0; CRaumschiff *Temp = NULL; // Abfrage wie viele Raumschiffe gebaut werden sollen cout << " Anzahl: "; cin >> Anzahl; // Erstellen der Raumschiffe for (int j=0; j<Anzahl; j++) { Temp = new CRaumschiff (j+1); lSchiffe.push_back (Temp); } // Raumschiffe starten lassen for (i= lSchiffe.begin();i!=lSchiffe.end(); i++) { (*i)->starten(); } // Raumschiffe zerstören for (i=lSchiffe.begin(); i!=lSchiffe.end(); ++i) { delete (*i); (*i) = NULL; } //Liste löschen lSchiffe.clear(); system("PAUSE"); return 0; }
-
Du kannst eine std::list genauso als Membervariable verwenden wie ein int. Und wenn das bei dir nicht funktioniert, hast du halt was falsch gemacht.
-
matz-eed7 schrieb:
danke für den Tip aber wie sieht denn die sache aus, wenn ich in der klasse eine
liste verwalten will?also
list<int> my_list
da mekert der compiler, wenn ich die liste direkt in die klasse schreibe,
Was genau sagt er denn? (ich tippe mal darauf, daß du ein std:: davorsetzen mußt, damit er es erkennt.
also habe ich diese in den konstruktor, also stellvertretend for mein int, geschrieben! Möchte ich nun aber über ne print funktion die liste ausgeben,
Sehr schlechte Idee - lokale Variablen im Konstruktor werden sofort wieder zerstört, wenn der Ctor zu Ende ist. Das heißt, in dem Moment, wo du print() aufrufst, existiert die Liste schon gar nicht mehr.
Die einzige Möglichkeit, das zu umgehen, ist wie gesagt, daß du deine Objekte als Klassenvariablen anlegst (dann erzeugt der Ctor dass Objekt und es wird erst gelöscht, wenn das "Vater"-Objekt zerstört wird (am Ende der main())).
-
der tipp mit dem std:: vor der list war scheinbar richtig, zumindest mekert der compiler net mehr!!!!
alles andere muss ich nun erst mal testen!!!danke noch mal!!!!!