Zeiger auf Objekte
-
Hallo zusammen!
Ich habe jetzt schon so viel über Zeiger gelesen, aber irgendwie verstehe ich eine Sache noch nicht ganz..
//verwaltung.h class verwaltung { private: CModel* model; public: .... }Wenn ich ein so einen Zeiger auf ein Objekt erstelle, worauf zeigt dann dieser Zeiger genau? Eigentlich ja auf die Adresse des Speicherortes meines model Objektes, oder? Aber ich habe doch nirgends ein richtiges Objekt angelegt...?!
//richtiges Objekt anlegen?! //verwaltung.h class verwaltung { private: CModel model Cmodel* pmodel; public: verwaltung(){*pmodel=&model;} }Müsste es nicht eher so richtig sein?
Sorry die Anfängerfrage, aber ich glaube, ich bin total verwirrt...
Danke schonmal im Voraus!
-
Hallo,
Im Zeiger steht die Adresse deines Objektes. In deinem Beispielcode hast du einen Dereferenzierungsoperator * zuviel.
verwaltung(){pmodel = &model;}
-
iop schrieb:
Hallo zusammen!
Ich habe jetzt schon so viel über Zeiger gelesen, aber irgendwie verstehe ich eine Sache noch nicht ganz..
//verwaltung.h class verwaltung { private: CModel* model; public: .... }Wenn ich ein so einen Zeiger auf ein Objekt erstelle, worauf zeigt dann dieser Zeiger genau? Eigentlich ja auf die Adresse des Speicherortes meines model Objektes, oder? Aber ich habe doch nirgends ein richtiges Objekt angelegt...?!
Da der Zeiger noch nicht initialisiert ist an dieser Stelle zeigt er auf irgendeine zufällige Adresse im Speicher (oder 0 wenn Du im Debug Modus bist).
Darum sollte man IMMER entweder dem zeiger gleich einen Wert zuweisen bzw wenn das nicht geht ihn auf 0 setzen.
-
Ok, sorry, hab mich vertan, eigentilch wollte ich auch das schreiben:
//verwaltung.h class verwaltung { private: CModel model Cmodel* pmodel; public: verwaltung(){pmodel=&model;} }...ich schließe jetzt mal aus Deiner Antwort, dass das hier die richtige Methode ist. Danke übrigens schonmal!

Hier noch eine Frage:
//verwaltung.h class verwaltung { private: CModel *model; public: verwaltung() { model = new CModel[5]; } void tuwas(); } //verwaltung.cpp void verwaltung::tuwas() { model[2].irgendwas=19; //Variable int irgendwas vom dritten Modell wert 19 zuweisen }Und wie siehts hier aus? Das macht man ja auch direkt mit Zeigern? Wo bleibt da das "richtige" Objekt?
-
Nun, das macht er ja im Konstruktor. Auch wenn das Ganze ein wenig sinnlos ist. Ich denk mal es dient nur zum Lernen.
-
Ja, Danke erstmal!
..naja, zu "Lernzwecken"... ich werd mal ne Nacht drüber schlafen.
Was meinst Du mit sinnlos?
-
Ich meinte die erste Variante deiner verwaltung-Klasse. Eine Membervariable mit einem Zeiger auf eine andere Membervariable in einer Klasse ist für mich irgendwie sinnlos. Da kann man doch gleich direkt auf die Variable zugreifen.