014
12.05.2009, 20:41 Uhr
0xdeadbeef
Gott (Operator)
|
Ich mach das jetzt mal in echtem C++, dieser CLI-Kram ist ja widerlich. Also, ich finge das etwa so an:
C++: |
#include <iostream> #include <string>
class fernseher { public: fernseher();
void lautstaerke(int); void programm (int); void anschalten (); void ausschalten();
int lautstaerke() const; int programm () const; bool ist_an () const;
private: int lautstaerke_; int programm_; bool an_; };
fernseher::fernseher() : lautstaerke_(10), programm_(2), an_(false) { }
void fernseher::lautstaerke(int l) { lautstaerke_ = l; } void fernseher::programm (int p) { programm_ = p; } void fernseher::anschalten () { an_ = true ; } void fernseher::ausschalten() { an_ = false; }
int fernseher::lautstaerke() const { return lautstaerke_; } int fernseher::programm () const { return programm_ ; } bool fernseher::ist_an () const { return an_; }
void print(fernseher const &f) { std::cout << "An: " << (f.ist_an() ? "ja" : "nein") << std::endl << "Lautstärke: " << f.lautstaerke() << std::endl << "Programm: " << f.programm () << std::endl; }
int get_int(std::string const &prompt) { int x;
std::cout << prompt << std::flush; std::cin >> x;
return x; }
int main() { fernseher f;
if(get_int("Der Fernseher ist momentan ausgeschaltet. Bitte drücken Sie 0, um ihn\n" "einzuschalten.\n") == 0) { f.anschalten();
switch(get_int("Der Fernseher ist nun eingeschaltet.\n" "Was wollen Sie tun?\n" "1 - Programm ändern\n" "2 - Lautstärke ändern\n" "3 - Fernseher ausschalten\n")) { case 1: f.programm(get_int("Neues Programm: ")); break; case 2: f.lautstaerke(get_int("Neue Lautstärke: ")); break; case 3: f.ausschalten(); break; } } else { std::cout << "Der Fernseher ist immer noch aus." << std::endl; }
print(f); }
|
...beziehungsweise nicht genau so, aber ich wollte dir jetzt nicht gleich mit überladenen Operatoren und Funktionsvorlagen kommen. Anmerkungen habe ich folgende:
Eine eigene Init-Methode scheint mir hier nicht sinnvoll, das kann der Konstruktor erledigen (fernseher::fernseher()).
Ansonsten fällt bei deinem Code auf, dass du den selben Code immer und immer wieder schreibst. Ich halte jede Wette, dass du deine Methoden mindestens teilweise mit Strg-C, Strg-V erstellt hast - das ist denkbar schlechte Praxis. Wenn du dich dabei erwischst, lager den entsprechenden Code in eine eigene Funktion aus - wie etwa oben get_int und print.
In dem Zusammenhang auch anzumerken: Trenne verschiedene Funktionalitäten nach Möglichkeit in verschiedene Codestücke auf, dann kannst du sie flexibler verwenden. Eine Methode, die das Programm wechselt, sollte nur das Programm wechseln, dies aber nicht vom Benutzer erfragen - das ist eine völlig andere Funktionalität. Auf die Art kannst du sie auch benutzen, um zu einem Programm zu wechseln, dass der Benutzer nicht eingegeben hat - zum Beispiel für einen "zurück zum letzten Programm"-Knopf oder etwas in der Art. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 12.05.2009 um 20:54 Uhr von 0xdeadbeef editiert. |