// @topic T090m12d04x40 inheritance and virtual functions
// @brief class Shape, Rectangle, Circle

// shapes.h
#ifndef SHAPES_H_INCLUDED
#define SHAPES_H_INCLUDED

// encapsulation
// base class for drawing primitives
class Shape {
protected:
    int cx; // coordinates of the shape center point
    int cy;
public:
    // constructors / destructor
    Shape();
    Shape( int cx, int cy );
    virtual ~Shape() {}
    // operations
    //void compute_center();
    int get_cx() const;
    int get_cy() const;
    virtual void draw() const = 0;
};//class Shape

// rectangle is a shape
class Rectangle : public Shape {
public:
    static const int DEFAULT_RECT_SIZE = 10;
private:
    int x1, y1;
    int x2, y2;
public:
    // constructor
    Rectangle();
    // operations
    void compute_center();
    int width() const;
    int height() const;
    void draw() const;
};//class Rectangle

// circle is a shape
class Circle : public Shape {
    int m_radius;
public:
    // constructors
    Circle();
    Circle( int cx, int cy, int radius );
    // operations
    void compute_center();
    int radius() const;
    void draw() const;
};//class Circle

#endif //SHAPES_H_INCLUDED