#ifndef SHAPES_H #define SHAPES_H /////////////////////////Class Shape, abstract class class Shape { public: virtual double area() const{return 0.0; } virtual double volume() const{ return 0.0; } virtual void printShapeName()const= 0; virtual void print() const= 0; }; ////////////////////////////// Class Point class Point : public Shape { public: // parametric ctor, due to the default arguments acts also as defalt ctor Point( int = 0, int = 0 ); void setPoint( int, int ); int getX() const { return x; } int getY() const { return y; } virtual void printShapeName() const { cout << "Point: "; } virtual void print() const; private: int x, y; }; Point::Point( int a, int b ) { setPoint( a, b ); } void Point::setPoint( int a, int b ) { x = a; y = b; } void Point::print() const { cout << '[' << x << ", " << y << ']'; } /////////////////////////// Class Circle class Circle : public Point { public: // parametric ctor, due to the default arguments acts also as defalt ctor Circle( double r = 0.0, int x = 0, int y = 0 ); void setRadius( double ); double getRadius() const; virtual double area() const; virtual void printShapeName() const { cout << "Circle: "; } virtual void print() const; private: double radius; // radius of Circle }; Circle::Circle( double r, int a, int b ): Point( a, b ) { setRadius( r ); } void Circle::setRadius( double r ) { radius = r > 0 ? r : 0; } double Circle::getRadius() const { return radius; } double Circle::area() const { return 3.14159 * radius * radius; } void Circle::print() const{ Point::print(); cout << "; Radius = " << radius;} // ==,<,<< operators redefined for circles, global funcion outside the class namespace bool operator==(const Circle & c1, const Circle & c2){ return(c1.getRadius()==c2.getRadius() && c1.getX()==c2.getX() && c1.getY()==c2.getY());} bool operator<(const Circle & c1,const Circle & c2){ return(c1.getRadius()(const Circle & c1,const Circle & c2){ return(c1.getRadius()>c2.getRadius());} ostream & operator <<(ostream & o,Circle & c){ c.printShapeName(); c.print(); return o; } #endif