mirror of https://github.com/swig/swig
108 lines
2.8 KiB
C++
108 lines
2.8 KiB
C++
/*! \file example.h
|
|
This file provides a simple set of Shape classes. */
|
|
|
|
/*! Base class for all shapes.
|
|
\author Bob
|
|
*/
|
|
class Shape {
|
|
public:
|
|
/*! Default constructor for creating a Shape */
|
|
Shape() {
|
|
nshapes++;
|
|
}
|
|
/*! Destructor for destroying a Shape */
|
|
virtual ~Shape() {
|
|
nshapes--;
|
|
}
|
|
double x; /*!< x co-ordinate */
|
|
double y; /*!< y co-ordinate */
|
|
void move(double dx, double dy); /*!< Move a shape to a new co-ordinate
|
|
\param dx x co-ordinate
|
|
\param dy y co-ordinate */
|
|
virtual double area() = 0; /*!< \return the area */
|
|
virtual double perimeter() = 0; /*!< \return the perimeter */
|
|
static int nshapes; /*!< Number of shapes currently in existence */
|
|
};
|
|
|
|
/*! A class for representing a circle.
|
|
\author Jack
|
|
*/
|
|
class Circle : public Shape {
|
|
private:
|
|
double radius;
|
|
public:
|
|
/*! Construct a circle
|
|
* \param r radius of the circle */
|
|
Circle(double r);
|
|
/*! Calculate the area of the circle
|
|
* \return calculated area */
|
|
virtual double area();
|
|
/*! Calculate the perimeter of the circle
|
|
* \return calculated perimeter of the circle */
|
|
virtual double perimeter();
|
|
};
|
|
|
|
/// A class for representing a square.
|
|
class Square : public Shape {
|
|
private:
|
|
double width;
|
|
public:
|
|
/** Construct a square
|
|
* \param w width of the square */
|
|
Square(double w);
|
|
/** Calculate the area of the square
|
|
* \return calculated area */
|
|
virtual double area();
|
|
/** Calculate the perimeter of the square
|
|
* \return calculated perimeter of the square */
|
|
virtual double perimeter();
|
|
};
|
|
|
|
/// A class for representing a rectangle, templated on the type for the rectangle dimensions
|
|
template<typename T>
|
|
class Rectangle : public Shape {
|
|
private:
|
|
T height;
|
|
T width;
|
|
public:
|
|
/** Construct a rectangle
|
|
* \param h height of the rectangle
|
|
* \param w width of the rectangle */
|
|
Rectangle(T h, T w) : height(h), width(w) {}
|
|
/** Calculate the area of the rectangle
|
|
* \return calculated area */
|
|
virtual double area() { return width*height; }
|
|
/** Calculate the perimeter of the rectangle
|
|
* \return calculated perimeter of the rectangle */
|
|
virtual double perimeter() { return 2*height + 2*width; }
|
|
};
|
|
|
|
|
|
/*! Factory function for creating a square
|
|
* \param r width of the square
|
|
* \return a fully constructed square */
|
|
Square MakeSquare(double r);
|
|
|
|
/*! Factory function for creating a circle
|
|
* \param w radius of the circle
|
|
* \return a fully constructed circle */
|
|
Circle MakeCircle(double w);
|
|
|
|
/*! Factory function for creating a rectangle
|
|
* \param h height of the rectangle
|
|
* \param w width of the rectangle
|
|
* \return a fully constructed rectangle */
|
|
template<typename T>
|
|
Rectangle<T> MakeRectangle(T h, T w) {
|
|
return Rectangle<T>(h, w);
|
|
}
|
|
|
|
|
|
|
|
/*! Total number of circles ever created */
|
|
extern int NumCircles;
|
|
|
|
/// Total number of squares ever created
|
|
extern int NumSquares;
|
|
|