Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Klassen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.01.2006, 10:12 Uhr
~Greta
Gast


Hallo!

Ich lerne gerade C++. Soll ein Projekt umsetzten - eine Musikverwaltung.
Bis jetzt kann das Programm CDs einlesen und gespeicherte CDs nach Interpret und Jahr suchen und ausgeben.
Es soll auch CD's nach anderen Kriterien ausgeben, z.B. Musikrichtung, Stimmung, gesellschaftliches Ereignis usw.
Die Klasse Musik sieht so aus:


C++:
#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

class musik
{
private:
    char Titel[80];
    char Interpret[80];
    char Album[80];
    unsigned int Anzahl;
    unsigned int Dauer;
    unsigned int Jahr;

public:
    
    musik()                
    {
        strcpy (Titel, "");
        strcpy (Interpret, "");
        Anzahl = 0;
        Dauer = 0;
        Jahr = 0;
    }

    char* get_Interpret()        
    {
        return Interpret;
    }

    unsigned int get_Jahr()        
    {
        return Jahr;
    }

};






Ich frage mich, ob ich für die Eigenschaften Musikrichtung, Stimmung, gesellschaftliches Ereignis neue Klassen anelgen muss, oder ob ich das in die Klasse musik mit reinschreiben muss? Oder ob Musikrichtung, Stimmung, gesellschaftliches Ereignis "Unterklassen" der Klasse musik sind??
Danke schonmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.01.2006, 11:41 Uhr
Tommix



Hallo,
ich würde sagen, was Du da nennst sind weitere Eigenschaften der CD und somit Member wie Interpret usw. auch. Also z.B.

C++:
public:
  enum musik_richtung {rock, pop, classic}; // usw.
  musik_richtung get_Musikrichtung const {return Musikrichtung;}

private:
  musik_richtung Musikrichtung;


Am Rande:

Zitat:

C++:
char* get_Interpret()        
{
    return Interpret;
}



gibt einen Zeiger auf die Membervariable zurück und erlaubt somit dort von außen etwas reinzuschreiben - auch mehr als 80 Zeichen. Das ist keine so gute Idee. Sieh Dir mal Virtuals Beitrag in der FAQ zu dem Thema an.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.01.2006, 12:44 Uhr
~Greta
Gast


Hallo!
Ich hab's jetzt auch so gemacht, also die anderen Eigenschaften in die Klasse Musik gepackt. Bei mir sieht's nur anders aus.

C++:
#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

class musik
{
private:
    char Titel[80];
    char Interpret[80];
    char Album[80];
    unsigned int stimmung;
    unsigned int Anzahl;
    unsigned int Dauer;
    unsigned int Jahr;

public:
    musik()                
    {
        strcpy (Titel, "");
        strcpy (Interpret, "");
        Anzahl = 0;
        Dauer = 0;
        Jahr = 0;
        stimmung = 0;
    }

    char* get_Interpret()        
    {
        return Interpret;
    }

    unsigned int get_Jahr()        
    {
        return Jahr;
    }

    unsigned int get_stimmung()
    {
        return stimmung;
    }



im main-Programm steht das:


C++:
case 5:
          cout<<"\nBitte geben sie einen Interpreten an: ";
          cin.getline(suchinterpret, 79, '\n');
          cin.getline(suchinterpret, 79, '\n');
          cout<<"\nWie sind sie gelaunt?\n";
          cout<<"\n\n";
          cout<<"[1] In Partystimmung ((:\n";
          cout<<"[2] Gut gelaunt (:\n";
          cout<<"[3] Melancholisch ):\n";
          cout<<"[4] Zu Tode betruebt )):\n\n";
          cin>>suchstimmung;
    for  (i = 0; i<anz; i++)
        {
          compare = strcmp(suchinterpret,cd[i].get_Interpret());
        if (compare == 0 && suchstimmung == cd[i].get_stimmung())
             cout<<"\nWie waers mit:\n\n"<<cd[i]<<"\t?!";
                 else
             cout<<"\nNichts passendes gefunden.\n";
         }
            
      getch();





enum und das mit den geschweiften Klammern kannte ich nicht. Werd das gleich ausprobieren!
Und wieso ist es keine gute Idee mit dem Zeiger auf die Membervariable? Wenn der Benutzer CDs einlesen will, muss er da doch was reinschreiben können..?!
..werd mir mal den Artikel durchlesen, also Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.01.2006, 17:30 Uhr
~Greta
Gast


Ich habs jetzt mit enum ausprobiert, aber es klappt nicht..

C++:
class musik
{

public:
    enum Stimmung {sgut=1, gut=2, schlecht=3, sschlecht=4};

private:
    char Titel[80];
    char Interpret[80];
    char Album[80];
    unsigned int Anzahl;
    unsigned int Dauer;
    unsigned int Jahr;
    Stimmung stimmung;

public:
    musik(Stimmung n) : stimmung(n){}
    Stimmung getStimmung() const { return stimmung; }
    void setStimmung( Stimmung n)
    {
        switch(n){
        case sgut:
            cout<<"sehr gut";
            break;
        case gut:
            cout<<"gut";
            break;
        case schlecht:
            cout<<"schlecht";
            break;
        case sschlecht:
            cout<<"sehr schlecht";
            break;
        default: return;
        }
        stimmung = n;
    
    }



main-Programm:


C++:
    cout<<"\nBitte geben sie die Stimmung der CD ein: \n";
    cout<<"[1] Partystimmung\n";
    cout<<"[2] Gute Laune\n";
             cout<<"[3] Schlechte Laune\n";
    cout<<"[4] Herzschmerz\n";
    eingabe>>cd.stimmung;           //error C2679
            if( !(n <= 4 && n >= 1))
        {
            cout<<"Falsche Eingabe..\n";

        }
        else
        {
            eingabe>>cd.stimmung;

        }



error C2679: Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'enum musik::Stimmung' akzeptiert (oder keine geeignete Konvertierung moeglich)

Weiß einer, was man hier tun könnte?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.01.2006, 21:18 Uhr
virtual
Sexiest Bit alive
(Operator)


stimmung ist ein enum, dafür hast Du keinen Operator definiert. Vielleicht wird Dir das Problem selbst plausibel, wenn Du mal hinterfragst, was man Deiner Meinung nach überhaupt eingeben sollte, wenn die Stimmung "gut" ist? Die Zahl "2" oder den Namen des Entsprechenden enum Wertes "gut"? - Letztlich unvoreingenommen nicht leicht entscheidbar: ein enum ist ein enum ist ein enum.
Eventuell solltest Du die einfache Variante wählen und ein int eingeben und dieses dann brutal zu einer Stimmung casten:

C++:
int int_s;
cin>>int_s;
cd.stimmung = (stimmung)int_s;



Noch eine Anmerkung zur Ursprungsfrage: wähle die Namen Deiner Klassen mit Bedacht. zB ist Stimmung okay, aber "musik" ganz sicher nicht. Günstig ist, wenn jemand anders auf Anhieb ein klar umrissenes Bild hat von dem, was die Klasse darstellt. Soweit ich das sehe, ist Deine Musikklasse aber eher ein Musiktitel auf einem Tonträger. Letztlich bildet sich vor Meinen inneren Augen sowas in dieser Art:

C++:
class Komposition {
    std::string name;
    std::string komponist:
    ...
};

class Interpretation {
     Komposition komposition;
     std::string interpret;
     stilrichtung stilrichtung;
     unsigned dauer_sekunden;
     ....
};

class TonTräger {
    std::vector<Interpretation> interpretation;
    ...
};

class CD: public TonTräger {
    ...
};


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: