Instanz dynamisch und in unbegrenzter Anzahl anlegen
-
Hallo Leute,
habe viel gegooglet und bin auch schon auf die Struktur
Klasse *neueInszanz = new Klasse;
gekommen doch ich schildere euch mal mein vorhaben.
Als beispiel, ich habe eine Klasse vorrat! Jedes Produkt welches sich später in Vorrat befinden soll soll Namen, MHD (mindes haltbarkeitdatum) und Infos besitzen.
Jetzt möchte ich natürlich dass der Benutzer ein neues Produkt hinzufügen kann.
In meinem Fall wäre das ja:
vorrat *neueInstanz = new vorrat
Aber jetzt weiß oich nicht wie ich auf die Instanz zugreifen kann und ihr werte zusprechen kann.. Zudem möchte ich, dass er zu einem SPÄTEREN zeitpunkt so viele Produkte hinzufügen kann wie er möchte. Ich hänge an diesem Punkt gerade sehr... Hatte bis eben ein Paar Funktionnen, die aber wieder gelöscht weil ich einfach nicht weiter kam... Hier mal mein Grundgerüst:
#include <iostream> #include <conio.h> using namespace std; // KLASSEN // class vorrat { public: }; // MAIN FUNKTION // int main() { }
Ich weiß, da ist NICHTS drin aber ich möchte halt erstmal wissen wie das geht, was ich eben beschrieben habe... Also beliebig viele Instanzen erzeugen und bearbeiten!
Grüße und Vielen Dank im Vorraus
-
Dein vorletzter Codeschnipsel ist richtig. Ansonsten zeige uns mal was du schon so ausprobeirt hast!
-
#include <vector> vector<vorrat> produkte; produkte.push_back(vorrat());
-
ja, aber ich verstehe das nicht...
Wie greife ich den jetzt auf eines dieser Elemente zu? Die instanz hat ja gar keinen namen?!
Und dann siehts doch auch problematisch aus, wenn es mehrere werden, oder?
-
Mit dem Zeiger operator. So:
#include <iostream> using namespace std; class vorrat { private: int menge; public: vorrat(int Menge): menge(Menge){} int getMenge(){return menge;} }; int main() { vorrat *Vorrat = new vorrat(4); int menge = Vorrat->getMenge(); // -> Operator cout << menge; cin.get(); return 0; }
Edit: Da du später sicherlich verschiedene Waren haben wirst, musst du dich wie oben erwähnt mit den STL-Kontainern wie z.b. vector auseinandersetzen.
Beispiele und Erklärungen hier:
http://www.cplusplus.com/reference/stl/vector/
-
Michael E. schrieb:
#include <vector> vector<vorrat> produkte; produkte.push_back(vorrat());
Irgendwie scheinst du dies überlesen zu haben.
Ist aber wichtig!
-
Nein, hab mich eigentlich genau darauf bezogen! Ich weiß nicht wie ich da jetzt auf die einzelnen Elemente zugreifen kann! Soweit war ich vorher auch schon einmal, hat auch keinen fehle rnageziegt aber ich hab keinen schimmer wie ich die Instanz nun ändern kann...
-
http://www.cplusplus.com/reference/stl/vector/operator[]/
Schnapp dir eine beliebige Einführung in C++. Da steht drin, wie man mit Standardcontainern umgeht.
-
dygdg schrieb:
Nein, hab mich eigentlich genau darauf bezogen! Ich weiß nicht wie ich da jetzt auf die einzelnen Elemente zugreifen kann! Soweit war ich vorher auch schon einmal, hat auch keinen fehle rnageziegt aber ich hab keinen schimmer wie ich die Instanz nun ändern kann...
Mit dem []-Operator kannst du die Elemente ansprechen, steht alles in der referenz. Und versuch man ein Tutorial zum Thema zu finden, hier im Forum kann man dir nicht alles dazu beibringen. std::vector und andere STL-Container sind jedenfalls eine sehr wichtige Grundlage von C++, während die Technik mit dem new die du zuerst versucht hast ein eher fortgeschrittenes Thema ist, welches man eher selten braucht. Hier ist jedenfalls kein Bedarf dafür und es bringt bloß zusätzliche Fehlerquellen mit sich, wohingegen der std::vector das gleiche leistet, dafür aber besser und sehr fehlerrobust.
-
Ja ich hänge zzt noch bei den Klassen fest.. Vorallem habe ich schwierigkeiten mit Zeigern! Ich versteh einfach nicht wann man wie wieso einsetzt... Mal steht ein * hinter char oder am Parameter, mal nicht und ach herje... Kein autor erklärt das wirklich...
Habe ein Buch von Jürgen Wolf, C++ von A bis Z und Einstieg in C++ von Arnold Willemer...
Oder kennt ihr noch gute???
-
Klar. "Moderne C++-Programmierung" von Ralf Schneeweiß, da steht neben vielen Dingen auch der Grundsätzliche Umgang mit der STL drin. http://www.oop-trainer.de/publications/de/moderncpp/index.html
Kleine Liste guter Bücher: http://www.oop-trainer.de/Literatur/LitListeCPP.html
-
Jürgen Wolf...
naja vielleicht beantwortet dies deine fragen, aber den vectorinhalt musst du selbst noch freigeben.
vector<vorrat> produkte; produkte.push_back(*Vorrat); for(vector<vorrat>::iterator i = produkte.begin(); i != produkte.end(); ++i) cout << (*i).getMenge() << endl;
-
3636dv schrieb:
J
Jürgen Wolf, C++ von A bis Z uDu Armer. Noch ein Opfer.
Und mal wieder alle Meinungen über die Qualität dieses Buches bestätigt.
-
Mir wurde schon oft abgeraten aber ich hab halt nicht so viel Geld (Bin gerade einmal 16) und das sogar schon mit eines der teuersten... Und ehrlich, gefallen tut es mir auch nicht... Nur ich denke mir immer, dass die noch billigerne noch weniger taigen ode rnach unaschulicher geschreiben sind...
-
HighLigerBiMBam schrieb:
naja vielleicht beantwortet dies deine fragen, aber den vectorinhalt musst du selbst noch freigeben.
Nö.
Adds a new element at the end of the vector, after its current last element. The content of this new element is initialized to a copy of x.
-
72343965 schrieb:
Mir wurde schon oft abgeraten aber ich hab halt nicht so viel Geld (Bin gerade einmal 16) und das sogar schon mit eines der teuersten... Und ehrlich, gefallen tut es mir auch nicht... Nur ich denke mir immer, dass die noch billigerne noch weniger taigen ode rnach unaschulicher geschreiben sind...
Verkaufs und kauf dir ein besseres Buch. Dann brauchst du nicht mehr viel zu bezahlen, aber der Nutzen ist groß.