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;
    };
    

Anmelden zum Antworten