#ifndef _CIRCLE_H_
#define _CIRCLE_H_

#include <iostream>
#include <iomanip>
#include <string>
#ifndef _SHAPE_H_
  #define _SHAPE_H_
#endif

class Circle : public Shape
{
	public:
		Circle();
		Circle(float);
		std::string getType();
		float getPerimeter();
		float getArea();
};

std::ostream& operator << (std::ostream& out, Circle&);

Circle::Circle()
{

}

Circle::Circle(float val)
{
	len = val;
}

std::string Circle::getType()
{
	return "Circle";
}

float Circle::getPerimeter()
{
	return 2*len*3.14;
}

float Circle::getArea()
{
	return 3.14*(len*len);
}

std::ostream& operator << (std::ostream& out, Circle& c)
{
	out<<c.getType()<<" with Perimeter: "<<c.getPerimeter()<<" and Area: "<<c.getArea()<<"\n";
	float len2 = c.getLen();
	for (int i = 0; i<2*len2+1; i++)
        {
                for (int j = 0; j<2*len2+1;j++)
                {
                        if (j == len2 || j==len2-i || j ==len2+i
                                || i == len2
                                || j==i-len2 || j==(i+len2)-(2*(i-len2)))
                                out<<std::setw(2)<<"*";
                        else
                                out<<"  ";
                }
                out<<std::endl;
        }
	return out;
}

#endif

