[C/C++] Brauche Hilfe beim Vererbung von Klassen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von oida, 4. Juli 2010 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 4. Juli 2010
    Brauche Hilfe beim Vererbung von Klassen

    Hi,
    ich programmiere noch nicht so lange und hoffe ihr könnt mir helfen.

    Also ich soll diese Aufgabe programmieren :

    Programmiere eine kleine Klassenhierarchie, um unterschiedlich ausführliche
    Informationen über Tennisspieler in einem Tennisverein zu speichern. Die zu
    verwaltenden Daten sind:
    Tennisspieler:
    Name des Tennisspielers, Name des Tennisvereins,

    TennisspielerMitLK:
    zusätzlich die Angabe der Altersklasse (ganze Zahl) und der Leistungsklasse
    (ganze Zahl zwischen 1 und 22),

    Mannschaftsspieler:
    zusätzlich die Anzahl der Siege, der Niederlagen und der Punktzahl.

    Entwirf drei voneinander abgeleitete Klassen
    Tennisspieler
    TennisspielerMitLK
    Mannschaftsspieler

    mit jeweils einer ausprogrammierten ausgabe()-Methode, so dass durch folgendes
    Hauptprogramm die komplette verfügbare Information für alle Tennisspieler ausgegeben
    wird:

    int main()
    {
    Tennisspieler *player[3];
    player[0]=new Tennisspieler("Meier1", "Gelb-Weiss");
    // Spielername, Vereinsname
    player[1]=new TennisspielerMitLK("Meier2", "Telekom-Post-SV", 55, 18);
    // + Altersklasse,
    Leistungsklasse
    player[2]=new Mannschaftsspieler("Meier3", "BTTC", 30, 12, 4, 2, 330);
    // + Siege, Niederlagen,
    Punkte
    for (int i=0; i<=2; i++)
    {
    player->ausgabe();
    cout << "----------------------------" << endl;
    }
    }

    Beispielausgabe:
    Name: Meier1
    Verein: Gelb-Weiss
    ----------------------------
    Name: Meier2
    Verein: Telekom-Post-SV
    Altersklasse: 55
    Leistungsklasse: 18
    ----------------------------
    Name: Meier3
    Verein: BTTC
    Altersklasse: 30
    Leistungsklasse: 12
    Siege: 4
    Niederlagen: 2
    Punkte: 330
    ----------------------------
    Beachte, dass sich hinter den Basisklassenzeigern sowohl Objekte der Klasse
    Tennisspieler als auch der anderen Klassen verbergen können! Die Ausgabe von
    Teilinformationen, die schon in einer Elternklasse vorhanden sind, soll durch Ausnutzung
    von deren Methode ausgabe() erfolgen!

    und so weit bin ich jetzt :

    Code:
    # include <iostream>
    # include <string.h>
    # include <string>
    
    using namespace std;
    
    class Tennisspieler
    {
     private:
     int Name, NameVer;
     
     public:
     Tennisspieler(int name, int nameVer)
     {
     Name=name;
     NameVer=nameVer;
     };
     
     void ausgabe();
     
    };
    
    class TennisspielerMitLK: public Tennisspieler
    {
     private:
     int Altersklasse , Leistungsklasse;
     
     prublic:
     // TennisspielerMitLK(int alterK, int leistungK);
     
     
     TennisspielerMitLK(int alterK, int leistungK,int name, int nameVer): Tennisspieler(name,nameVer),Altersklasse(alterK){},Leistungsklasse(leistungK){};
     void ausgabe();
    };
    
    class Mannschaftsspieler: public TennisspielerMitLK
    {
     private:
     int Siege, Niederlagen, Punkte;
     
     public:
     Mannschaftsspieler( int Siege, int Niederlagen, int Punkte)
     {
     Siege=sieg;
     Niederlagen=nieder;
     Punkte=Punkte;
     };
     Mannschaftsspieler(int name, int nameVer,int alterK, int leistungK; int sieg, int nieder, int Punkte): TennisspielerMitLK(int alterK, int leistungK);
     void ausgabe();
    };
    
    void Tennisspieler::ausgabe()
    {
     cout << Name <<"Name: " << Name-Ver << "Verein:" << endl;
    };
    
    void TennisspielerMitLK::ausgabe()
    {
     Tennisspieler.ausgabe();
     cout << Altersklasse << "Alterklasse: " << Leistungsklasse << "Leistungsklasse: " << endl;
    };
    
    void Mannschaftsspieler::ausgabe()
    {
     TennisspielerMitLK.ausgabe();
     cout << Siege << "Siege: " << Niederlagen << "Niederlagen: " << Punkte << "Punkte: " << endl;
    };
    
    
    int main()
    {
     Tennisspieler *player[3];
     Tennisspieler *player0= new Tennisspieler("Meier1", "Gelb-Weiß");
     player0->ausgabe();
     Tennisspieler *player1= new TennisspielerMitLK("Meier2", "Telekom-Post-SV", 55, 18);
     player1->ausgabe();
     Tennisspieler *player2= new Mannschaftsspieler("Meier3", "BTTC", 30, 12, 2, 330);
     player2->ausgabe();
     
     Punkte
     for (int i=0; i<2; i++)
     {
     name[i] ->ausgabe();
     cout << "------------------------" << endl;
     }
     
    }
    Aber bei mir kommt ein fehler:
    32 invalid use of undefined type `class TennisspielerMitLK'
    und ich weiß nicht weiter??? Kann mir vielleicht einer von euch helfen?

    Vielen Danke schonmal
     
  2. 4. Juli 2010
    AW: Hilfe Fehler

    Was für ein Fehler kommt denn? Ohne wird dir hier wohl so schnell keiner helfen können...
     
  3. 4. Juli 2010
    AW: Hilfe Fehler

    Es kommt
    32 invalid use of undefined type `class TennisspielerMitLK'

    hierwas ist hier falsch
    TennisspielerMitLK(int alterK, int leistungK,int name, int nameVer): Tennisspieler(name,nameVer),Altersklasse(alterK){},Leistungsklasse(leistungK){};

    danke
     
  4. 4. Juli 2010
    AW: Hilfe Fehler

    ich denke der Fehler kommt einfach weil du "prublic" anstatt "public" geschrieben hast?!

    benutzt du keine entwicklungsumgebung? da sollten Schlüsselwörter eigentlich farblich markiert werden

    mfg

    EDIT: Du solltest am besten auch direkt anfangen für jede klasse eine eigene header und cpp datei anzulegen... damit wirds gleich viel übersichtlicher... und du solltest für jede klasse einen destruktor "~Klassenname" und einen Standartkonstruktor anlegen "Klassenname( )"
     
  5. 4. Juli 2010
    AW: Hilfe Fehler

    Die Aussage ist falsch. Die werden automatisch vom Compiler angelegt (machen dann entsprechend eben auch nix). Wenn er nichts initialisieren oder löschen muss (dynamisch angelegten Speicher z. B.), ist sowas nicht nötig...
     
  6. 4. Juli 2010
    AW: Brauche Hilfe beim Vererbung von Klassen

    So danke das hat geholfen
    Aber ich möchte das lieber in einer .cpp datei machen .

    Jetzt läuft es soweit aber in der ausgabe wir immer nur der Name und der Verein angezeigt nicht die Vererbung? Wieso ?

    hier der neue Code:

    Code:
    # include <iostream>
    # include <string.h>
    # include <string>
    
    using namespace std;
    
    class Tennisspieler
    {
     private:
     string Name, NameVer;
     
     public:
     Tennisspieler(string name, string nameVer)
     {
     Name=name;
     NameVer=nameVer;
     };
     
     void ausgabe();
     
    };
    
    class TennisspielerMitLK: public Tennisspieler
    {
     private:
     int Altersklasse , Leistungsklasse;
     
     public:
     // TennisspielerMitLK(int alterK, int leistungK);
     
     
     TennisspielerMitLK(string name, string nameVer,int alterK, int leistungK): Tennisspieler(name,nameVer),Altersklasse(alterK),Leistungsklasse(leistungK){};
     void ausgabe();
    };
    
    class Mannschaftsspieler: public TennisspielerMitLK
    {
     private:
     int Siege, Niederlagen, Punkte;
     
     public:
     
     Mannschaftsspieler(string name, string nameVer,int alterK, int leistungK, int sieg, int nieder, int Punkte): TennisspielerMitLK(name, nameVer, alterK, leistungK),Siege(sieg),Niederlagen(nieder),Punkte(Punkte){};
     void ausgabe();
    };
    
    void Tennisspieler::ausgabe()
    {
     cout <<"Name: " << Name << "\nVerein: " << NameVer << endl;
     cout << "-------------------------------\n";
    };
    
    void TennisspielerMitLK::ausgabe()
    {
     Tennisspieler::ausgabe();
     cout << "Alterklasse: " <<Altersklasse << "Leistungsklasse: "<< Leistungsklasse << endl;
    };
    
    void Mannschaftsspieler::ausgabe()
    {
     TennisspielerMitLK::ausgabe();
     cout << "Siege: " << Siege << "Niederlagen: " << Niederlagen << "Punkte: " << Punkte<< endl;
    };
    
    
    int main()
    {
     Tennisspieler *player[3];
     Tennisspieler *player1= new Tennisspieler("Meier1", "Gelb-Weiß Bielefeld");
     player1->ausgabe();
     Tennisspieler *player2= new TennisspielerMitLK("Meier2", "Telekom-Post-SV", 55, 18);
     player2->ausgabe();
     Tennisspieler *player3= new Mannschaftsspieler("Meier3", "BTTC", 30, 12,4, 2, 330);
     player3->ausgabe();
     system("pause");
     
     /* Punkte
     for (int i=0; i<2; i++)
     {
     name[i] ->ausgabe();
     cout << "------------------------" << endl;
     }*/
     
    }
     
     
     
     
     
    
     
  7. 4. Juli 2010
    AW: Brauche Hilfe beim Vererbung von Klassen

    Code:
    # include <iostream>
    # include <string.h>
    # include <string>
    
    using namespace std;
    
    class Tennisspieler
    {
     private:
     string Name, NameVer;
     
     public:
     Tennisspieler(string name, string nameVer)
     {
     Name=name;
     NameVer=nameVer;
     };
     
     [B]virtual[/B] void ausgabe();
     
    };
    
    class TennisspielerMitLK: public Tennisspieler
    {
     private:
     int Altersklasse , Leistungsklasse;
     
     public:
     // TennisspielerMitLK(int alterK, int leistungK);
     
     
     TennisspielerMitLK(string name, string nameVer,int alterK, int leistungK): Tennisspieler(name,nameVer),Altersklasse(alterK),Leistungsklasse(leistungK){};
     [B]virtual[/B] void ausgabe();
    };
    
    class Mannschaftsspieler: public TennisspielerMitLK
    {
     private:
     int Siege, Niederlagen, Punkte;
     
     public:
     
     Mannschaftsspieler(string name, string nameVer,int alterK, int leistungK, int sieg, int nieder, int Punkte): TennisspielerMitLK(name, nameVer, alterK, leistungK),Siege(sieg),Niederlagen(nieder),Punkte(Punkte){};
     [B]virtual[/B] void ausgabe();
    };
    
    void Tennisspieler::ausgabe()
    {
     cout << "Name: " << Name << "\nVerein: " << NameVer << endl;
     cout << "-------------------------------\n";
    };
    
    void TennisspielerMitLK::ausgabe()
    {
     Tennisspieler::ausgabe();
     cout << "Alterklasse: " <<Altersklasse << "Leistungsklasse: "<< Leistungsklasse << endl;
    };
    
    void Mannschaftsspieler::ausgabe()
    {
     TennisspielerMitLK::ausgabe();
     cout << "Siege: " << Siege << "Niederlagen: " << Niederlagen << "Punkte: " << Punkte<< endl;
    };
    
    
    int main()
    {
     Tennisspieler *player[3];
     Tennisspieler *player1= new Tennisspieler("Meier1", "Gelb-Weiß Bielefeld");
     player1->ausgabe();
     Tennisspieler *player2= new TennisspielerMitLK("Meier2", "Telekom-Post-SV", 55, 18);
     player2->ausgabe();
     Tennisspieler *player3= new Mannschaftsspieler("Meier3", "BTTC", 30, 12,4, 2, 330);
     player3->ausgabe();
     system("pause");
     
     /* Punkte
     for (int i=0; i<2; i++)
     {
     name[i] ->ausgabe();
     cout << "------------------------" << endl;
     }*/
     
    }
    
    Du musst die Funktion virtual machen, sonst wird immer die Funktion der Basisklasse aufgerufen.
     
  8. 4. Juli 2010
    AW: Brauche Hilfe beim Vererbung von Klassen

    danke jetzt gehts
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.