enum in Klassen
-
Hi, habe ein kleines Verständnisproblem mit enum in Klassen.
In meinem Buch steht folgende Klasse:#ifndef _AMPEL_ #define _AMPEL_ #include <iostream> using namespace std; class Ampel { public: // Aufzählung für Klasse Ampel enum Status { aus,rot,gruen,gelb }; private: Status status; public: Ampel( Status s = aus) : status(s) {} Status getStatus() const { return status; } void setStatus( Status s) { switch(s) { case aus: cout << " AUS "; break; case rot: cout << " ROT "; break; case gruen: cout << " GRUEN "; break; case gelb: cout << " GELB "; break; default: return; } status = s; } }; #endif
So wird die Klasse angewendet:
#include "ampel.h" #include <iostream> #include <windows.h> #include <string> using namespace std; inline void wait(int sec) { Sleep(1000*sec);} int main() { string abstand(13,' '); enum {gruenSec1=20,gruenSec2=19,gelbSec=1}; cout<<"Einige Anweisungen mit Ampel-Objeken!\n"<<endl; Ampel a1,a2; while(true) { a1.setStatus(Ampel::rot); a2.setStatus(Ampel::gelb); cout<<"\n"<<abstand; a2.setStatus(Ampel::gruen); wait(gruenSec1); cout<<"\n"<<abstand; a2.setStatus(Ampel::gelb); cout<<"\n"; a1.setStatus(Ampel::gelb); a2.setStatus(Ampel::rot); cout<<"\n"; wait(gelbSec); a1.setStatus(Ampel::gruen); wait(gruenSec2); cout<<"\n"; a1.setStatus(Ampel::gelb); wait(gelbSec); cout<<"\n"; } return 0; }
Was ich hier nicht ganz verstehe ist warum ich die Farben nur über den Bereichsoperator ansprechen kann (z.B. Ampel::gelb)? Und so einen Status Objekt kann ich nur so erreichen
Ampel::Status farben
Liegt das ganze daran, weil "Status" in der Klasse "Ampel" deklariert ist?
Warum sollte man "Status" überhaupt in der Klasse deklarieren? Warum nicht davor? So könnte man sich dieses "Ampel::" sparen... bzw. wann sollte man es in der Klasse deklarieren.
-
FUNPAQ schrieb:
Liegt das ganze daran, weil "Status" in der Klasse "Ampel" deklariert ist?
Ja.
Warum sollte man "Status" überhaupt in der Klasse deklarieren? Warum nicht davor? So könnte man sich dieses "Ampel::" sparen...
Der Name Status ist allein nicht besonders aussagekräftig. Woher soll man denn wissen, dass ein Ampelstatus gemeint ist? Vielleicht gibts in dem Programm noch andere Typen, die auch gern Status heißen würden.
-
Achso, damit man mehrere Objekte in einem Programm deklarieren kann. Eigentlich logisch...
THX