/* File : example.h */ #include class Shape { public: Shape() { nshapes++; } virtual ~Shape() { nshapes--; } double x, y; void move(double dx, double dy); virtual double area(void) = 0; virtual double perimeter(void) = 0; static int nshapes; }; class Circle : public Shape { private: double radius; public: Circle(double r) : radius(r) { } virtual double area(void); virtual double perimeter(void); }; class Square : public Shape { private: double width; public: Square(double w) : width(w) { } virtual double area(void); virtual double perimeter(void); }; Circle* createCircle(double w); // this method creates a new object Square* createSquare(double w); // this method creates a new object class ShapeOwner { private: std::vector shapes; ShapeOwner(const ShapeOwner&); // no copying ShapeOwner& operator=(const ShapeOwner&); // no copying public: ShapeOwner(); ~ShapeOwner(); void add(Shape* ptr); // this method takes ownership of the object Shape* get(int idx); // this pointer is still owned by the class (assessor) Shape* remove(int idx); // this method returns memory which must be deleted };