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




MyPoint := new Point(1, 8)
MyPoint.Print()
MyCircle := new Circle(4, 7, 9)
MyCircle2 := MyCircle.Copy()
MyCircle.SetX(2)	;Assignment method
MyCircle.y := 3		;Direct assignment
MyCircle.Print()
MyCircle2.Print()
MyCircle.SetX(100), MyCircle.SetY(1000), MyCircle.r := 10000 
MsgBox, % MyCircle.__Class
	. "`n`nx:`t" MyCircle.GetX()
	. "`ny:`t" MyCircle.y 
	. "`nr:`t" MyCircle.GetR()
return
 
class Point
{
	Copy()
	{
		return this.Clone()
	}
	GetX()
	{
		return this.x
	}
	GetY()
	{
		return this.y
	}
	__New(x, y)
	{
		this.x := x
		this.y := y
	}
	Print()
	{
		MsgBox, % this.__Class 
			. "`n`nx:`t" this.x 
			. "`ny:`t" this.y
	}
	SetX(aValue)
	{
		this.x := aValue
	}
	SetY(aValue)
	{
		this.y := aValue
	}
}
 
class Circle extends Point
{
	GetR()
	{
		return this.r
	}
	__New(x, y, r)
	{
		this.r := r
		base.__New(x, y)
	}
	Print()
	{
		MsgBox, % this.__Class 
			. "`n`nx:`t" this.x 
			. "`ny:`t" this.y 
			. "`nr:`t" this.r
	}
	SetR(aValue)
	{
		this.r := aValue
	}
}