#include <iostream.h>

class viscomp {
public:
  viscomp() {};
  
  virtual void draw () { cout << "(draw viscomp)";};
  
};


class decorator : public viscomp {

public:
  decorator(viscomp *it) : _component(it) {};
  
  virtual void draw  () { 
    cout << "(draw decorator)";
    _component->draw();
  };
  
private:
  viscomp *_component; 
}  ;


class border: public decorator {
public:
  border(viscomp* it): decorator(it) {};
  virtual void draw() { cout << "border"; 
  decorator::draw();
  };

};

class title: public decorator {
public:
  title(viscomp * it): decorator(it) {}; 
  virtual void draw() { cout << "title"; 
  decorator::draw();
  };

};

class Base: public viscomp {
public:
  Base() {};
  virtual void draw() {cout << "draw base";};
};

main () {

  Base *b = new Base();
  title *tb = new title(b);
  border *btb = new border(tb);
  btb->draw();
}

