// @topic T090m12d04x50 inheritance and virtual functions
// @brief implementation code for Shape, Rectangle, Circle
#include <cstdlib>
#include <iostream>
#include "shapes.h"
Shape::Shape()
:
cx( 0 ), cy( 0 )
{
}//Shape::Shape
Shape::Shape( int cx, int cy )
:
cx( cx ), cy( cy )
{
}//Shape::Shape
// constructors
Circle::Circle()
:
Shape( 1, 1 ), m_radius( 1 )
{
}//Circle::Circle
Circle::Circle( int cx, int cy, int radius )
:
Shape( cx, cy ), m_radius( radius )
{
}//Circle::Circle
// operations
void Circle::compute_center()
{
}//Circle::compute_center
int Circle::radius() const
{
return m_radius;
}//Circle::radius
// make rectangle a unit-sized square
Rectangle::Rectangle()
:
x1( 0 ), y1( 0 ),
x2( DEFAULT_RECT_SIZE ), y2( DEFAULT_RECT_SIZE )
{
compute_center();
}//Rectangle::Rectangle
int Shape::get_cx() const
{
return cx;
}//Shape::get_cx
int Shape::get_cy() const
{
return cy;
}//Shape::get_cy
void Rectangle::compute_center()
{
cx = ( x1 + x2 ) / 2;
cy = ( y1 + y2 ) / 2;
}//Rectangle::compute_center
int Rectangle::width() const
{
return std::abs( x1 - x2 );
}//Rectangle::width
int Rectangle::height() const
{
return std::abs( y1 - y2 );
}//Rectangle::height
void Circle::draw() const
{
std::cout
//<< __LINE__
//<< __FILE__
<< __FUNCTION__
<< " cx == " << get_cx()
<< " cy == " << get_cy()
<< " r == " << radius()
<< "\n";
}//Circle::draw
void Rectangle::draw() const
{
std::cout
<< __FUNCTION__
<< " cx == " << get_cx()
<< " cy == " << get_cy()
<< " w == " << width()
<< " h == " << height()
<< "\n";
}//Rectangle::draw