Einschätzung von Erfahrenen



  • Hallo liebes Forum,
    ich habe mich heute dazu entschlossen mich hier anzumelden um eine Anlaufstelle für etweige Probleme zu haben.

    Ich bin noch relativ neu und unerfahren auf dem C++ Gebiet, daher habe ich mich heute hingesetzt und eine kleine minimalistische Sache zu proggen, anhand derer ich mich freuen würde ihr eine Einschätzung zu mir machen könntet.

    Gemein ist damit: Stil, Lösungswege, Verständniss, und weiß der geier was noch.
    Wer sich als Sherlok Holmes versuchen möchte ist auch gerne angehalten zu ermitteln aus welchem Gebiet(hatte schon Kontakt mit einer anderen Sprache) ich eigentlich komme oder sowas. Ich entschuldige mich vorweg schonmal für die riesen Codewand 😞 hoffe das hier sowas nicht böse gesehn wird.

    Ich will auch keine Bauchpinselei, sondern die objektive vlt auch kritische Meinung von Leuten die mehr Ahnung haben als ich 😉

    // Videospiel.h
    #include <iostream>
    #include <string>
    
    #ifndef __GAME_H__
    #define __GAME_H__
    
    using namespace std;
    class Videospiel
    {
    private:
    	// Membervariablen
    	string name;
    	int erscheinungsjahr;
    	bool genre;
    	bool plattform;
    
    public:
    	// Konstruktoren
    	Videospiel(const string name = "Nicht angegeben", const int erscheinungsjahr = 0, const bool genre = 0, const bool platform = 0);
    
    	// Memberfunktionen
    	void setName(string name);
    	void setErscheinungsjahr(int jahr);
    	void setGenre(bool plattform);
    	void setPlattform(bool plattform);
    	void print();
    	void test_plattform();
    	void test_genre();
    	// Enumerationen für Genre und Plattform
    	enum genre {RPG, FPS, RTS, RACE };
    	enum plattform { PC, PS2};
    
    };
    
    #endif
    
    // Videospiel.cpp
    #include <iostream>
    #include <string>
    #include "Videospiel.h"
    using namespace std;
    
    //Konstruktor weißt bei vollständigen Angaben  selbige passend zu
    Videospiel::Videospiel(string name, int erscheinungsjahr, bool genre, bool plattform)
    {
    	this->name = name;
    	this->erscheinungsjahr = erscheinungsjahr;
    	this->genre = genre;
    	this->plattform = plattform;
    }
    
    // Funktion zum setzen des Namen
    void Videospiel::setName(string name)
    {
    	this->name = name;
    }
    
    // Funktion zum setzen des Erscheinungsjahrs
    void Videospiel::setErscheinungsjahr(int jahr)
    {
    	this->erscheinungsjahr = jahr;
    }
    
    // Funktion zum setzen des Genres
    void Videospiel::setGenre(bool genre)
    {
    	this->genre = genre;
    }
    
    // Funktion zum setzen der Plattform
    void Videospiel::setPlattform(bool plattform)
    {
    	this->plattform = plattform;
    }
    
    // Funktion zum ausgeben aller Angaben
    void Videospiel::print()
    {
    	cout << "Name des Spiels: " << name << endl;
    	cout << "Erscheinungsjahr: " << erscheinungsjahr << endl;
    	cout << "Genre: ";
    	test_genre();
    	cout << "Plattform: ";
    	test_plattform();
    }
    
    // Funktion zum überprüfen, um welches Genre es sich bei dem Spiel handelt
    void Videospiel::test_genre()
    {
    	switch(genre)
    	{
    		case 0:
    			cout << "Rollenspiel" << endl;
    			break;
    		case 1:
    			cout << "Firstperson Shooter" << endl;
    			break;
    		case 2:
    			cout << "Echtzeit Strategie" << endl;
    			break;
    		case 3:
    			cout << "Rennspiel" << endl;
    			break;
    	}
    }
    
    // Funktion zum überprüfen, für welche Plattform das Spiel ist
    void Videospiel::test_plattform()
    {
    	switch(plattform)
    	{
    	case 0:
    		cout << "PC" << endl;
    		break;
    	case 1:
    		cout << "PS2" << endl;
    		break;
    	}
    }
    
    // main.cpp
    #include "Videospiel.h";
    #include <iostream>
    
    int main()
    {
    	cout << "++++++++++++++++++++++++++++++++++++++++++" << endl;
    	cout << "++\tRudimentaere Spielebibliothek\t++" << endl;
    	cout << "++++++++++++++++++++++++++++++++++++++++++" << endl;
    	//Erzeuge ein Array für die Aufnahme von 10 Videospiel Objekten
    	Videospiel *ptrSpiel = new Videospiel[10];
    	bool abr = false;
    	//Solange nicht abgebrochen wurde mach weiter
    	while(!abr)
    	{
    		cout << "Was wollen sie tun?" << endl;
    	    cout << "1 - Neues Spiel eintragen" << endl;
    	    cout << "2 - Spiele ausgeben" << endl;
    	    cout << "3- Abbrechen" << endl;
    	    int choose;
    	    // Meldung bei fehlender Eingabe
    	    if(!(cin >> choose))
    	    {
    			cout << "Es wurde keine Eingabe gemacht." << endl;
    	    }
    	    int i = 0;
    	    string name;
    	    int jahr;
    	    bool genre;
    	    bool plattform;
    
    	    switch(choose)
    	    {
    		case 1:
    			cin.ignore(50, '\n');
    		    cout << "Name des Spiels: ";
    		    getline(cin, name);
    		    cout << "\nErscheinungsjahr: ";
    		    cin >> jahr;
    		    cout << "\nDas genre (RPG=0, FPS=1, RTS=2, RACE=3): ";
    		    cin >> genre;
    		    cout << "\nFuer welche Plattform? (PC=0, PS2=1) ";
    		    cin >> plattform;
    			ptrSpiel[i].setName(name);
    			ptrSpiel[i].setErscheinungsjahr(jahr);
    			ptrSpiel[i].setGenre(genre);
    			ptrSpiel[i].setPlattform(plattform);
    			ptrSpiel[i].setName(name);
    			ptrSpiel[i].print();
    			i++;
    			break;
    		case 2:
    			cout << "Folgende Spiele sind vorhanden:" << endl;
    			for(int i = 0; i<10; i++)
    			{
    				ptrSpiel[i].print();
    			    cout << "==============================="<< endl;
    		    }
    			break;
    		case 3:
    			abr = true;
    		}
    	}
    	system("PAUSE");
    }
    


  • Warum sind genre und plattform vom Typ bool? Bei value-Parametern lässt man das const normalerweise weg, weil das dem Aufrufer keine Informationen gibt. (Du kannst sein Zeug eh nicht verändern). Vor C++11 hätte ich erwähnt, dass du statt std::string eine const std::string& nehmen solltest um eine Kopie zu sparen, aber jetzt sollte man auf std::move ausweichen. :p Es ist zudem eher unüblich (und meiner Meinung nach auch ziemlich hässlich) überall this-> zu schreiben.
    Ich rate mal ins Blaue und sage du kommst aus Python.


  • Mod

    using namespace std; in Headern geht gar nicht. new für Arrays, noch dazu mit statischer Größe, ist auch Todsünde. Compiliert nicht, da du dich darauf verlassen hast, dass sich Systemheader gegenseitig einbinden, cstdlib fehlt für system. Das system macht auf meinem Rechner ganz was anderes als bei dir. Dein Konstruktor ist Mist, nutze eine Initialisierungsliste. Dein switch-case arbeitet auf dem bool "genre", hat aber die Fälle 2 und 3. Du meinst vermutlich eher ein enum. Für mehr habe ich gerade keine Zeit, da gibt es aber noch mehr über das Gesamtdesign zu sagen.



  • mit den ENUMs wollte ich eigentlich die plattform und genre abdecken habe mich dann aber verheddert und weiß nicht genau wie man das nun mit übergabe und aufrufen macht 😕

    bei mir compiliert es einwandfrei.

    system("PAUSE") sorgt bei mir dafür, dass das Konsolenfenster nicht direkt wieder zu geht.
    //Edit: Eben gelesen warum das suckt. weils system speziefisch ist und nichts mit c++ zu tun hat. Als Alternative wurde cin.ignore(); cin.get(); angeführt.
    Meinung?

    Und diese Initialisierungslisten raff ich auch noch nicht so ganz.



  • Ampere schrieb:

    system("PAUSE") sorgt bei mir dafür, dass das Konsolenfenster nicht direkt wieder zu geht.

    Du könntest dir eine Funktion wait() schreiben, die das automatische Schließen verhindert. Hier im Forum gibts auch nen Beitrag dazu, lies ihn dir mal durch.
    http://www.c-plusplus.net/forum/111042

    Gruß



  • Ampere schrieb:

    Und diese Initialisierungslisten raff ich auch noch nicht so ganz.

    class A
    {
      int i_, j_;
    public:
      A(int i, int j)
        : i_(i) // Initialisierungsliste
        , j_(j)
      {}
    };
    


  • P_T schrieb:

    Ampere schrieb:

    system("PAUSE") sorgt bei mir dafür, dass das Konsolenfenster nicht direkt wieder zu geht.

    Du könntest dir eine Funktion wait() schreiben, die das automatische Schließen verhindert. Hier im Forum gibts auch nen Beitrag dazu, lies ihn dir mal durch.
    http://www.c-plusplus.net/forum/111042

    Gruß

    wo ist die qualität? haben sich alle fähigen verdrückt, oder haben wir einfach einen schlechten jahrgang 😕

    so eine wait funktion gehört in keinen code. entweder setzt man einen breakpoint am ende, oder man macht das über die ide http://www.c-plusplus.net/forum/p1852604#1852604



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten