Классы семейства геометрических фигур
Автор: admin | 20 Июнь 2008 – 21:59 -Классы семейства геометрических фигур
Приведем теперь программные коды классов, являющихся потомками класса Figure.
Класс Ellipse
Вот программный код этого класса:
using System;
using System.Drawing;
namespace Shapes
{
/// <summary>
/// Класс Ellipse – потомок класса Figure.
/// </summary>
public class Ellipse: Figure
{
int axisA,axisB;
Rectangle rect;
public Ellipse(int A, int B, int x, int y ): base(x,y)
{
axisA = A; axisB = B;
rect =Init();
}
public override void Show(Graphics g, Pen pen, Brush brush)
{
rect = Init();
g.DrawEllipse(pen,rect);
g.FillEllipse(brush, rect);
}
public override Rectangle Region_Capture()
{
rect = Init();
return rect;
}
Rectangle Init()
{
int a =Convert.ToInt32(axisA*scale);
int b =Convert.ToInt32(axisB*scale);
int leftupX = center.X – a;
int leftupY = center.Y – b;
return( new Rectangle(leftupX,leftupY,2*a,2*b));
}
}
}
Класс Circle
Этот класс является потомком класса Ellipse:
using System;
using System.Drawing;
namespace Shapes
{
/// <summary>
/// Класс Circle – потомок класса Ellipse.
/// </summary>
public class Circle: Ellipse
{
public Circle( int radius,int x,
int y):base(radius,radius,x,y)
{
//Круг – это эллипс с равными полуосями (радиусом круга)
}
}
}
Здесь опять-таки проявляется мощь наследования. Потомок наследует все свойства и методы родителя. Ему остается только указать собственный конструктор объектов класса, да и в нем главное состоит в вызове конструктора родительского класса с передачей ему нужных аргументов.
Класс LittleCircle
Этот класс, задающие маленькие кружочки фиксированного радиуса, в свою очередь, является наследником класса Circle. Устроен он также чрезвычайно просто:
using System;
namespace Shapes
{
/// <summary>
/// Класс LittleCircle – потомок класса Circle.
/// </summary>
public class LittleCircle:Circle
{
public LittleCircle(int x,int y): base(4,x,y)
{
// маленький круг радиуса 4
}
}
}
Класс Rect
Этот класс является еще одним прямым потомком класса Figure:
using System;
using System.Drawing;
namespace Shapes
{
/// <summary>
/// Класс Rect – потомок класса Figure.
/// </summary>
public class Rect:Figure
{
int sideA, sideB;
Rectangle rect;
public Rect(int sideA,int sideB, int x, int y): base(x,y)
{
this.sideA = sideA; this.sideB = sideB;
rect =Init();
}
public override void Show(Graphics g, Pen pen, Brush brush)
{
rect = Init();
g.DrawRectangle(pen,rect);
g.FillRectangle(brush,rect);
}
public override Rectangle Region_Capture()
{
rect = Init();
return rect;
}
Rectangle Init()
{
int a =Convert.ToInt32(sideA*scale);
int b =Convert.ToInt32(sideB*scale);
int leftupX = center.X – a/2;
int leftupY = center.Y – b/2;
return( new Rectangle(leftupX,leftupY,a,b));
}
}
}
Класс Square
Квадрат – это частный случай прямоугольника. Соответствующий класс является потомком класса Rect:
using System;
namespace Shapes
{
/// <summary>
/// Класс Square – потомок класса Rect.
/// </summary>
public class Square:Rect
{
public Square(int side, int x, int y): base(side,side,x,y)
{
//квадрат – это прямоугольник с равными сторонами
}
}
}
Класс Person
Этот класс является прямым потомком класса Figure. Вместе с тем, класс является клиентом трех других классов семейства – Circle, Rect и LittleCircle, поскольку элементы фигуры, составляющие человечка, являются объектами этих классов%
namespace Shapes
{
/// <summary>
/// Класс Person – потомок класса Figure,
/// клиент классов Circle, Rect, LittleCircle.
/// </summary>
public class Person:Figure
{
int head_h;
Circle head;
Rect body;
LittleCircle nose;
public Person(int head_h, int x, int y): base(x,y)
{
//head_h – радиус головы, x,y – ее центр.
//остальные размеры исчисляются относительно
//размера головы.
this.head_h = head_h;
head = new Circle(head_h,x,y);
int body_x = x;
int body_y = y + 3*head_h;
int body_w =2*head_h;
int body_h = 4*head_h;
body = new Rect(body_w, body_h, body_x,body_y);
nose = new LittleCircle(x+head_h +2, y);
}
public override void Show(System.Drawing.Graphics g,
System.Drawing.Pen pen, System.Drawing.Brush brush)
{
int h = Convert.ToInt32(head_h*scale);
//head
int top_x = center.X – h;
int top_y = center.Y – h;
g.DrawEllipse(pen, top_x,top_y, 2*h,2*h);
g.FillEllipse(brush, top_x,top_y, 2*h,2*h);
//body
top_y += 2*h;
g.DrawRectangle(pen, top_x,top_y, 2*h,4*h);
g.FillRectangle(brush, top_x,top_y, 2*h,4*h);
//nose
top_y -=h;
top_x += 2*h;
g.DrawEllipse(pen, top_x,top_y, 8,8);
g.FillEllipse(brush, top_x,top_y, 8,8);
}
public override System.Drawing.Rectangle
Region_Capture()
{
int h = Convert.ToInt32(head_h*scale);
int top_x = center.X – h;
int top_y = center.Y – h;
return new
System.Drawing.Rectangle(top_x,top_y,2*h,2*h);
}
}
}
Tags: axisA, axisB, base, Capture, Convert, DrawEllipse, FillRectangle, Graphics, namespace, Override, pen, Person, Rectangle, scale, sideA
Находится в Учебник | No Comments »
Ответить
Вы должны быть в системе, дабы комментировать.
