Task

Create two classes   Point(x,y)   and   Circle(x,y,r)   with a polymorphic function print, accessors for (x,y,r), copy constructor, assignment and destructor and every possible default constructors




$ include "seed7_05.s7i";
 
const type: GraphicObj is new interface;
 
const proc: print (in GraphicObj: aGraphicObj) is DYNAMIC;
 
 
const type: Point is new struct
    var integer: x is 0;
    var integer: y is 0;
  end struct;
 
type_implements_interface(Point, GraphicObj);
 
const func Point: Point (in integer: x, in integer: y) is func
  result
    var Point: newPoint is Point.value;
  begin
    newPoint.x := x;
    newPoint.y := y;
  end func;
 
const proc: print (in Point: aPoint) is func
  begin
    writeln("Point(" <& aPoint.x <& ", " <& aPoint.y <& ")");
  end func;
 
 
const type: Circle is sub Point struct
    var integer: r is 0;
  end struct;
 
type_implements_interface(Circle, GraphicObj);
 
const func Circle: Circle (in integer: x, in integer: y, in integer: r) is func
  result
    var Circle: newCircle is Circle.value;
  begin
    newCircle.x := x;
    newCircle.y := y;
    newCircle.r := r;
  end func;
 
const proc: print (in Circle: aCircle) is func
  begin
    writeln("Circle(" <& aCircle.x <& ", " <& aCircle.y <& ", " <& aCircle.r <& ")");
  end func;
 
 
const proc: main is func
  local
    var Point: pnt is Point(1, 2);
    var Circle: circ is Circle(3, 4, 5);
    var GraphicObj: graph is Point.value;
  begin
    graph := pnt;
    print(graph);
    graph := circ;
    print(graph);
  end func;