enum und Subscript operator []
-
hallo,
ich versuche einen Jukebox zu Programmieren, und da ich enum zum ersten mal benutze, weiss ich nicht wie ich diese Funktion verwenden soll.
Hier ist mein Code :#include<iostream> using namespace std; class Jukebox { private : int *p; int titel_in ; public: Jukebox (int titel = 300); ~Jukebox (void); int &operator [] (int index); enum m {RocknRoll , Schnulze , Techno , Goodbye}; }; Jukebox :: Jukebox(int titel) { p = new int [titel]; if (p) { titel_in = titel; } else titel = 0; } Jukebox :: ~Jukebox (void) { if (p) { delete [] p; p = NULL; } } int &Jukebox :: operator [] (int index) { if (index >=0 && index < titel_in) return p [index]; cerr << "Zugriff außerhalb Bereich" << "ist" << index << "Max ist :" << titel_in - 1 << endl; exit (1); }Ich möchte mit hilfe von enum, das Programm so verwalten:
wenn der benutzer ein Zahl zwischen 1 und 100 , wird er die Rocknroll titeln bekommen und der subscript operator [] gibt einen string aus "Rocknroll ".
101 bis 200 , werden die schnulzen lieder abgespielt und der subscript operator [] gibt einen string aus "Schnulzen ".
201 bis 300 werden die Techno lieder abgespielt und der subscript operator [] gibt einen string aus "Techno ".
titel 222 wird das lied Goodbye abgespielt und der subscript operator [] gibt einen string aus "Goodbye ".Und das Programm wird beendet.Hat jemand eine Idee??
Danke schon mal
-
hm? der code ist an sehr vielen stellen mindestens komisch...
was soll der op[] nun ausgeben? int? int&? string? m(der/das enum)?
was stellst du dir unter eine jukebox vor? einfach nur x titel in einer liste? (bzw irgendeinem container)
und zu dem titel sollen versch. informationen (z.bsp. genre) gespeichert werden, richtig?bb
-
Dein Code macht nichts ausser nicht-initialisierte integer auszuspucken.
Wieso packst du nicht alle Lieder in einen Container und sortierst den nach Genre.
-
hallo,
ich weiss nicht was Ihr mit Countainer meint. Das programm soll einfach für jede musik Richtung den selben String ausgeben.
hier ist die aufgabe:
**
Die Platten bzw. Titel in der Jukebox werden über ein Array verwaltet. Es gibt Platz für 300
Titel.Titel 1-100 sind die Rock&Roll-Titel, dort werden beim Zugriff auf einen dieser Titel vom
Subscript-Operator ausgegeben: „Es leben Twist, Boogie, RocknRoll“ (Ausgabestring).Titel 101 bis 200 sind die Schnulzen, dort wird beim Zugriff ausgegeben: „Jetzt träumerisch
schauen und gelegentlich seufzen“.Titel 201 bis 300 sind die Techno-Titel, dort wird ausgegeben „Raven bis der Arzt kommt“.
Titel 222 ist speziell. Da kommt der Titel „It’s Time to say Goodbye“ und das Programm wird
nach dieser Ausgabe beendet.• Erstellen Sie die Klasse „Jukebox“.
• Schreiben Sie einen Konstruktor, der die 300 Plätze für die Titel als enum-Objekte s.u.
(alternativ als integer-Objekte) erstellt (Ressource beschaffen).• Schreiben Sie einen Destruktor, der die beschafften Ressourcen wieder freigibt und
danach eine Meldung ausgibt, dass das Objekt aufgelöst wurde.• Überladen Sie den Subscript-Operator so, dass beim Zugriff die zur Titelnummer passende
Aktion ausgelöst wird, also die Ausgabe der Titelnummer und des Ausgabetextes s.o. Der
Operator soll vom folgenden Ergebnistyp sein:enum Musiktyp {RocknRoll, Schnulze, Techno, GoodBye};
• Hinweis: Was ist ein Zugriff? : weisen Sie einer passenden Variablen den Ergebniswert zu.
• Erstellen Sie ein Hauptprogramm, in dem Sie eine Instanz der Klasse Jukebox definieren
und über den Subscript-Operator auf die Titel zugreifen und damit die oben beschriebenen
Methoden aufrufen.Beispiel: i = jukebox1[37];
• Verwenden Sie dazu eine Schleife, in der die Titelnummer vom Benutzer eingelesen wird
und damit der Zugriff durchgeführt wird.• Wenn die Titelnummer 222 eingegeben wurde, wird nach dem Zugriff die Schleife beendet.
Damit endet auch das Programm.**
-
Was mal wieder für eine dämliche Aufgabe...
Weil heute Pfingstsonntag ist als Inspiration:#include <vector> #include <algorithm> #include <string> class jukebox { public: enum genre{RocknRoll , Schnulze , Techno , Goodbye}; jukebox() : songs(100, RocknRoll) { songs.insert(songs.end(),100, Schnulze ); songs.insert(songs.end(),100, Techno ); songs.push_back(Goodbye); } genre operator[](size_t index) { genre g = songs.at(index); std::cout << genre_message(g); return g; } private: std::string genre_message(genre g) { switch(g) { case RocknRoll: return "Jetzt kommt RocknToll"; case Schnulze: return "Jetzt kommt Schnulze"; case Techno: return "Jetzt kommt Techno"; case Goodbye: return "Und Tschüss"; } return "ballaballa?"; } std::vector<genre> songs; };