Mehrere Probleme (OOP)
-
Hallo, ich hab ein Problem mit meinem Programm, ich poste es mal und stelle anhand dessen meine Fragen, damit ich es besser nachvollziehen kann.
Danke./*Erstellen Sie ein Programm zur Verwaltung von Musik-cd's! Die CD's sollen dabei in Form von Objekten erfasst werden! Entwerfen Sie die Klasse(n) und programmieren sie eine Routine, um eine vom User definierte Anzahl von CDs zu erfassen (dynamische Instanzierung)! Erstellen Sie die Möglichkeit die Daten in einer Datei zu speichern!*/ #include <iostream> #include <string> #include <conio> using namespace std; //FILE *cdDatei class CD { private: int Nummer; string Titel; string Interpret; string Genre; public: //Konstruktor CD(); CD(int,string,string,string); //Dekonstruktor ~CD(); //Methoden void cdanzahl(double); void cdeingabe(double); void cdspeichern(); }; void CD::cdanzahl(double) { int x; cin >> x; } CD::CD(int N, string T, string I, string G) { Nummer = N; Titel = T; Interpret = I; Genre = G; } CD::~CD() {} int main() { cout << "Wieviele CDs wollen Sie speichern?" <<endl<<endl; cout << "Anzahl: "; getchar(); return 0; }
Ich hab hier eine Eingabe:
void CD::cdanzahl(double) { int x; cin >> x; }
Wenn ich eine Zahl eingebe, wie kann man die dann speichern damit ich nachher mit Zeigerarrys vortfahren kann...
... Zeigerarrys, Wenn ich dann eine Zahl eingegeben hab, sollen denn soviele Instanzen dynamisch erzeugt werden... wie geht das?
Im Programm selbst kommt dann z.b.CD *Anz[x]; // Zeigerarray für Objekte
Wenn ich dann soweit bin das ich CDs eingegeben hab, erfolgt die Speicherung in einer Datei auch mit dem Prototyp fwrite() ?
So, nun brauch ich erstmal kleine Hifen um weiter fortzuschreiten ..
-
Dein Ansatz ist OOP-technisch falsch, denn ein CD Objekt verwltet sich für gewöhnlich nichgt selbst. Du könntest z.B. ne CDAdmin Klasse schreiben, die die Verwaltung übernimmt, dann ein CD Objekt, welches ein Array von Lied Objekten enthält.
Zu deiner 1. Frage:
Leg eine Int-Instanz an und schreib cin >> varName;zur zweiten:
Leg das Array (nur wenn eindimensional) mit new an, aber vergiss auf keinen Fall das delete[]
-
Oder (das mit delete[]) benutze smart pointer! Und in sachen speichern: Ich favorisiere die umwandlung in ein array (wenn du vectoren benutzt) und danach binäres schreiben/lesen mittels read/write.
-
Ich würde es so machen
class CD { /* .... */} class CDVerwaltung { /* .... */ vector<CD> CDs; //hier werden alle eingetragenen CD-Objekte gespeichert }
-
Danke für die Antworten .. bloß ich kann nichts mit dem allen Anfagen weil! ich noch nie vectoren hatte
und ich glaube nicht das ich das im selbststudium raffen werde
-
Ganz einfach:
#include vector #include iostream using namespace std; int main { vector<int> v; //einen Vektor aus ints erstellen for (int i=0;i<11;++i) { v.pushback(i); //i anhängen cout<<v[i]<<endl; }; v[15]=15; //wird automatisch vergrößert //[...] };
->vectoren verhalten sich (per konvention) wie arrays, aber noch darüber hinaus! -> viiieeel einfacher als mit arrays!
-
ness schrieb:
Ganz einfach:
v[15]=15; //wird automatisch vergrößert
Da wird nichts vergrößert, das wird einfach sang und klanglos abstürzen!
-
Wobei ich den Vector in den zusammenhang auch noch in Frage Stellen wuerd ?
Welcher User will denn immer auf die X'te CD zugreifen .... wobei der Index nicht mal bestaendig ist,
Glaub list fuer den ersten Schuss waer viel zukunftstraechtiger@Gast123
Beschaeftige auch "nebenbei" bisserl mit design, ned nur mit c++ hardcore material
Abstraktion hilft dir an vielen Stellen das leben leichter zu machen. Ne klasse die Daten verwaltet und gleichzeitig ein und ausgabe uebernimmt, ist meist nie ne gute Idee ....die STL solltest dir auch anschauen .... Gibt gute buecher die Grundlagen erst mal gut rueberbringen und erstes feeling fuer designfragen aufkommen lassen. C++ Programmierung von Andre Willms z.B.
Ciao ...
-
Und Ein/Ausgabe über op>> bzw. op<< wär auch praktisch. Dann kannste auch sowohl auf Konsole, als auch in die Datei ausgeben.