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




class Circle (x, y, r)
  # make a new copy of this instance
  method copy ()
    return Circle (x, y, r)
  end
 
  # print a representation of this instance
  method print ()
    write ("Circle (" || x || ", " || y || ", " || r || ")")
  end
 
  # called during instance construction, to pass in field values
  initially (x, y, r)
    self.x := if /x then 0 else x # set to 0 if argument not present
    self.y := if /y then 0 else y
    self.r := if /r then 0 else r
 
end
 
class Point (x, y)
  # make a new copy of this instance
  method copy ()
    return Point (x, y)
  end
 
  # print a representation of this instance
  method print ()
    write ("Point (" || x || ", " || y || ")")
  end
 
  # called during instance construction, to pass in field values
  initially (x, y)
    self.x := if /x then 0 else x # set to 0 if argument not present
    self.y := if /y then 0 else y
 
end
 
procedure main ()
  p1 := Point ()
  p2 := Point (1)
  p3 := Point (1,2)
  p4 := p3.copy ()
 
  write ("Points:")
  p1.print ()
  p2.print ()
  p3.print ()
  p4.print ()
  # demonstrate field mutator/accessor
  p3.x := 3
  write ("p3 value of x is: " || p3.x)
 
  c1 := Circle ()
  c2 := Circle (1)
  c3 := Circle (1,2)
  c4 := Circle (1,2,3)
 
  write ("Circles:")
  c1.print ()
  c2.print ()
  c3.print ()
  c4.print ()
end
 