/* File : example.h */

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);
};
