#include <iostream> using namespace std; // struct IManager { public: IManager(IManager *pHighLevelManager) : m_pHighLevelManager(pHighLevelManager) { } virtual ~IManager() { } virtual void dealWithRequest(int num) = 0; protected: IManager *m_pHighLevelManager; }; class CCommonManager : public IManager { public: CCommonManager(IManager *pHighLevelManager) : IManager(pHighLevelManager) { } virtual ~CCommonManager() { } virtual void dealWithRequest(int num) { if(num <= 500) { cout<<"common manager deal with request."<<endl; } else { m_pHighLevelManager->dealWithRequest(num); } } }; class CMajorManager : public IManager { public: CMajorManager(IManager *pHighLevelManager) : IManager(pHighLevelManager) { } virtual ~CMajorManager() { } virtual void dealWithRequest(int num) { if(num <= 1000) { cout<<"major manager deal with request."<<endl; } else { m_pHighLevelManager->dealWithRequest(num); } } }; class CTopManager : public IManager { public: CTopManager(IManager *pHighLevelManager) : IManager(pHighLevelManager) { } virtual ~CTopManager() { } virtual void dealWithRequest(int num) { cout<<"top manager deal with request."<<endl; } }; // void main() { CTopManager topManager(NULL); CMajorManager majorManager(&topManager); CCommonManager commonManager(&majorManager); commonManager.dealWithRequest(300); commonManager.dealWithRequest(800); commonManager.dealWithRequest(3000); }