#include <iostream> #include <string> using namespace std; class text { public: text(){} virtual ~text(){} virtual void operation(){cout<<"a text"<<endl;} }; class Scoll :public text { public: Scoll(){} virtual ~Scoll(){} void decorator(text* comp){this->tx=comp;} void operation(){tx->operation();} protected: text *tx; }; class vScoll :public Scoll { public: vScoll(){} virtual ~vScoll(){} void operation(){cout<<"vscoll+";Scoll::operation();} }; class hScoll : public Scoll { public: hScoll(){} virtual ~hScoll(){} void operation(){cout<<"hscoll+";Scoll::operation();} }; int main() { text *ptx=new text; Scoll *pvs=new vScoll; Scoll *phs=new hScoll; ptx->operation(); pvs->decorator(ptx); pvs->operation(); phs->decorator(pvs); phs->operation(); delete phs; delete pvs; delete ptx; system("pause"); return 0; }