hallo.
habe hier folgende klasse vor mir liegen:
class klasse
{
public:
klasse(AbstractXXXreceiver& xxxReceiver,
XXXMaster& master,
TaskType task,
EventMaskType event,
AlarmType alarm,
Cycle& nullCycle);
virtual ~klasse()
{}
void schedule();
void start();
void stop();
bool started();
void requestCycle(Cycle& cycle, uint8 pos=0);
uint8 interruptActiveCycle(Cycle& cycle, uint8 pos=0);
uint8 stopActiveCycle();
Cycle& getActiveCycle()
{
return *fActiveCycle;
}
bool addcycleListener(IcycleListener& listener);
void removecycleListener(IcycleListener& listener);
void setCycleType(uint8 cycleType);
uint8 getCycleType(void);
private:
struct State : private common::Uncopyable
{
virtual ~State(){}
virtual void schedule(klasse& ls){ assert(false); }
virtual void start(klasse& ls){ assert(false); };
virtual void stop(klasse& ls){ assert(false); };
virtual void requestCycle(Cycle& cycle, uint8 pos, klasse& ls){ assert(false); }
virtual uint8 interruptActiveCycle(Cycle& cycle, uint8 pos, klasse& ls){ assert(false); return 0; }
virtual uint8 stopActiveCycle(klasse& ls) {assert(false); return 0; }
};
struct Stopped: State
{
virtual ~Stopped(){}
virtual void start(klasse& ls);
};
struct Idle: State
{
virtual ~Idle(){}
virtual void schedule(klasse& ls);
virtual void stop(klasse& ls);
virtual void requestCycle(Cycle& cycle, uint8 pos, klasse& ls);
virtual uint8 interruptActiveCycle(Cycle& cycle, uint8 pos, klasse& ls);
virtual uint8 stopActiveCycle(klasse& ls){ return 0; }
};
struct Running: State
{
virtual ~Running(){}
virtual void schedule(klasse& ls);
virtual void stop(klasse& ls);
virtual void requestCycle(Cycle& cycle, uint8 pos, klasse& ls);
virtual uint8 interruptActiveCycle(Cycle& cycle, uint8 pos, klasse& ls);
virtual uint8 stopActiveCycle(klasse& ls);
};
struct Stopping: State
{
virtual ~Stopping(){}
virtual void schedule(klasse& ls);
virtual void stop(klasse& ls);
virtual void requestCycle(Cycle& cycle, uint8 pos, klasse& ls){}
virtual uint8 interruptActiveCycle(Cycle& cycle, uint8 pos, klasse& ls){ return 0; }
virtual uint8 stopActiveCycle(klasse& ls){ return 0; }
};
void changeState(State& state)
{
fpCurrentState = &state;
}
static Stopped fStopped;
static Idle fIdle;
static Running fRunning;
static Stopping fStopping;
State* fpCurrentState;
/* hier kommen noch einige funktionsdefinitionen und enums usw. */
}
frage:
was bedeutet das alles?
daß es public-funktionen gibt, die von außen sichtbar sind, ist klar.
daß mich die assert(false); raushauen, wenn ich auf eine private-funktion zugreifen will, ist auch klar.
daß common::Uncopyable die klasse Uncopyable im namespace common meint, ist auch klar - warum das gebraucht wird, weniger…?
wo ich im moment total aufm schlauch stehe, sind diese structs… was machen die? bzw. was kann ich damit machen?
und kann mir bitte jemand bestätigen, daß das für jemanden, der bisher nur C programmiert hat, ziemlich schwere kost ist?!
gruß
michael