/* File : example.h */ template class Shape { private: static int nbshapes; public: Shape() { x = 0; y = 0; nbshapes++; } virtual ~Shape() { nbshapes--; }; T x, y; void move(T dx, T dy); virtual T area() = 0; virtual T perimeter() = 0; static int getNbShapes(); }; template class Circle : public Shape { private: T radius; public: Circle(T r) : Shape() { radius = r; }; virtual T area(); virtual T perimeter(); }; template class Square : public Shape { private: T width; public: Square(T w) : Shape() { width = w; }; virtual T area(); virtual T perimeter(); };