// @topic T071155 vector of shapes
// @brief class inheritance and virtual functions

#ifndef SHAPES_H_INCLUDED_
#define SHAPES_H_INCLUDED_

#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <memory> // for unique_ptr

class Shape {
public:
    virtual ~Shape() {} // virtual destructor
    virtual void draw() const = 0; // pure virtual function
};//class Shape

class Line : public Shape {
public:
    void draw() const {
        std::cout << "Line " << this << "\n";
    }
};//class Line

class Rectangle : public Shape  {
public:
    void draw() const {
        std::cout << "Rectangle " << this << "\n";
    }
};//class Rectangle

class Circle : public Shape  {
public:
    void draw() const {
        std::cout << "Circle " << this << "\n";
    }
};//class Circle

#endif //SHAPES_H_INCLUDED_