/* File : example.c */ #include "example.h" #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* Move the shape to a new location */ void Shape::move(double dx, double dy) { x += dx; y += dy; } int Shape::nshapes = 0; double Circle::area(void) { return M_PI*radius*radius; } double Circle::perimeter(void) { return 2*M_PI*radius; } double Square::area(void) { return width*width; } double Square::perimeter(void) { return 4*width; } Circle* createCircle(double w) { return new Circle(w); } Square* createSquare(double w) { return new Square(w); } ShapeOwner::ShapeOwner() { printf(" ShapeOwner(%p)\n", (void *)this); } ShapeOwner::~ShapeOwner() { printf(" ~ShapeOwner(%p)\n", (void *)this); for(unsigned i=0;i= static_cast(shapes.size())) return NULL; return shapes[idx]; } Shape* ShapeOwner::remove(int idx) // this method returns memory which must be deleted { if (idx < 0 || idx >= static_cast(shapes.size())) return NULL; Shape* ptr=shapes[idx]; shapes.erase(shapes.begin()+idx); return ptr; }