class Widget { public: Widget(); virtual ~Widget(); virtual void draw(); virtual void update(); protected: Widget *parent; }; class compositeWidget : public widget { public: virtual void draw() { //some drawing code for (int i = 0; i < widgets.size(); i++) widgets[i]->draw(); } virtual void update() { //some drawing code for (int i = 0; i < widgets.size(); i++) widgets[i]->update(); } virtual void add(Widget *widget) { widget->parent = this; widgets.push_back(widget); } private: std::vector widgets; };