class CarDecoratorProgressTracker : public CarDecorator { bool mHaveDoors; bool mHaveEngine; bool mHaveWheels; ... virtual void addEngine(Engine* engine) { if (engine) mHaveEngine = true; CarDecorator::addEngine(engine); } virtual void addDoors(Door* doors, int doorsCount) { if (doorsCount && doors) mHaveDoors = true; CarDecorator::addDoors(doors, doorsCount); } ... virtual bool readyToMove() { return (mHaveDoors && mHaveEngine && mHaveWheels); }; };