summaryrefslogtreecommitdiff
path: root/Examples/java/doxygen/example.h
blob: 203348ae4fea38d3140c4c4c25e23b22d98a9f65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*! \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;