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.
-
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/111042Gruß
-
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/111042Gruß
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.