git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10326 626c5289-ae23-0410-ae9c-e8d60b6d4f22
54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
/* 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
|
|
};
|
|
|
|
|