Listing 3
using namespace System;
public ref class Circle : ICloneable
{
Point^ origin;
float radius;
public:
property Point^ Origin
{
Point^ get() { return static_cast<Point^>(origin->Clone()); }
}
void SetOrigin(int x, int y)
{
origin->X = x;
origin->Y = y;
}
void SetOrigin(Point^ p)
{
SetOrigin(p->X, p->Y);
}
property double Radius
{
double get() { return radius; }
void set(double value) {
radius = static_cast<float>(value);
}
}
Circle()
{
origin = gcnew Point;
SetOrigin(0, 0);
Radius = 0.0;
}
Circle(int x, int y, double r)
{
origin = gcnew Point;
SetOrigin(x, y);
Radius = r;
}
Circle(Point^ p, double r)
{
origin = gcnew Point;
SetOrigin(p->X, p->Y);
Radius = r;
}
virtual String^ ToString() override
{
return String::Concat("{", Origin, ",", Radius, "}");
}
virtual Object^ Clone()
{
/*1*/ Circle^ c = static_cast<Circle^>(MemberwiseClone());
/*2*/ c->origin = static_cast<Point^>(origin->Clone());
/*3*/ return c;
}
};