/* File : example.h */ | |
#include <vector> | |
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<Shape*> 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 | |
}; | |