📚 Hub Books: Онлайн-чтение книгРазная литератураИнтернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория»

Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория»

Шрифт:

-
+

Интервал:

-
+
1 ... 397 398 399 400 401 402 403 404 405 ... 415
Перейти на страницу:
Shapes

{

   /// <summary>

   /// Класс Ellipse — потомок класса Figure.

   /// </summary>

   public class Ellipse: Figure

   {

       int axisA,axisB;

       Rectangle rect;

       public Ellipse (int A, int B, int x, int у): base(x,у)

       {

           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,у)

         {

              //квадрат — это прямоугольник с равными сторонами

         }

    }

}

Класс 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,у);

           int body_x = x;

           int body_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);

       }

   }

}

Список с курсором. Динамические структуры данных

Добавим в проект классы, задающие динамические структуры данных. Конечно, можно было бы воспользоваться стандартными… Но для обучения крайне полезно уметь создавать собственные задающие такие структуры данных. Список с курсором — один из важнейших образцов подобных классов:

using System;

namespace Shapes {

   /// <summary>

   /// Класс TwoWayList(G) описывает двусвязный список с

1 ... 397 398 399 400 401 402 403 404 405 ... 415
Перейти на страницу:

Комментарии

Обратите внимание, что комментарий должен быть не короче 20 символов. Покажите уважение к себе и другим пользователям!

Никто еще не прокомментировал. Хотите быть первым, кто выскажется?