#include <iostream> #include <string>
using namespace std;
class requirement { public: requirement(requirement* _rq,int _level) :rq(_rq),level(_level) {
}
//virtual setLevel(requirement* rq, int level); virtual bool isMe(int _curlevel) { if(level == _curlevel) return true; else return false; }
virtual void handle(int _curlevel) { if(isMe(_curlevel)) { showmsg(); } else { cout<<"up."<<endl; rq->handle(_curlevel); } }
virtual void showmsg() { cout<<"rq."<<endl; }
protected: requirement* rq; int level; };
class PM : public requirement { public: PM(requirement* _rq, int _level) :requirement(_rq, _level) {
} virtual void showmsg() { cout<<"PM."<<endl; } };
class TL : public requirement { public: TL(requirement* _rq, int _level) :requirement(_rq, _level) {
} virtual void showmsg() { cout<<"TL."<<endl; } };
class SE : public requirement { public: SE(requirement* _rq, int _level) :requirement(_rq, _level) {
}
virtual void showmsg() { cout<<"SE."<<endl; } };
class Programmer : public requirement { public: Programmer(requirement* _rq, int _level) :requirement(_rq, _level) {
}
virtual void showmsg() { cout<<"Programmer."<<endl; } };
int main(void) { requirement* onerq = new requirement(NULL,0); requirement* pm = new PM(onerq,1); requirement* tl = new TL(pm,2); requirement* se = new SE(tl,3); requirement* programmer = new Programmer(se,4); programmer->handle(0);
getchar(); return 1; }