Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб3_Разработка_Классов3.doc
Скачиваний:
4
Добавлен:
18.11.2018
Размер:
256.51 Кб
Скачать

4.1. Проектирование класса многоугольника.

Прежде всего, в классе фигуры необходимо предусмотреть наличие некоторого множества элементов, каждый из которых представляет собой структуру, состоящую, по крайней мере, из двух полей данных целого типа, например, X и Y, описывающих положение каждой вершины (точки). Подобная структура может выглядеть, например, так:

struct myPoint

{

public int X, // положение точки по горизонтали

Y; // положение точки по вертикали

}

Однако, наилучшим вариантом представляется использование уже готовой структуры, встроенной в язык С# под названием – Point. Этот значительно более мощный тип, обладающий более широкими функциональными возможностями. Она содержит в себе следующие элементы:

public struct Point

{

// Конструкторы:

public Point(int dw);

public Point(Size sz);

public Point(int x, int y);

// Статические данные

public static readonly Point Empty;

// Статические методы

public static Point Add(Point pt, Size sz);

public static Point Ceiling(PointF value);

public static Point Round(PointF value);

public static Point Subtract(Point pt, Size sz);

public static Point Truncate(PointF value);

// Статические операторы

public static Point operator -(Point pt, Size sz);

public static bool operator !=(Point left, Point right);

public static Point operator +(Point pt, Size sz);

public static bool operator ==(Point left, Point right);

public static explicit operator Size(Point p);

public static implicit operator PointF(Point p);

// Свойства:

public bool IsEmpty { get; }

public int X { get; set; }

public int Y { get; set; }

// Собственные методы класса

public void Offset(Point p);

public void Offset(int dx, int dy);

// Переопределенные виртуальные методы базового класса

public override bool Equals(object obj);

public override int GetHashCode();

public override string ToString();

}

При создании класса фигуры следует предусмотреть в нем наличие некоторого хранилища для своих вершин. В качестве такого хранилища можно использовать, например, массив или список, в которых каждый элемент имеет тип, соответствующий выбранной нами структуре данных для представления вершин многоугольника. В самом общем виде, такой класс может выглядеть следующим образом:

// Листинг 1: Для класса, содержащего массив элементов точек

class Figura

{

// Данные, характеризующие свойства объектов данного класса

….

myPoint Array[30]; // Массив из 30-ти элементов типа – myPoint

int PointsNum; // Реальное количество вершин у многоугольника

public:

Figura(); // Конструктор класса

void AddPoint(int x, int y); // Добавление новой вершины в фигуру

// Другие функции, определяющие поведение объектов данного класса

…..

}

или:

// Листинг 2: Для класса, содержащего список элементов точек

class Figura

{

// Данные, характеризующие свойства объектов данного класса

….

List<Point> PointList; // Список точек

public:

Figura(); // Конструктор класса

void AddPoint(int x, int y); // Добавление новой вершины в фигуру

// Другие функции, определяющие поведение объектов данного класса

….

}

В первом варианте класса фигуры используется представление точки в виде созданной нами структуры типа myPoint и их хранилища в виде массива из ограниченного количества элементов.

Во втором варианте класса фигуры используется встроенная в язык С# структура типа Point и хранилище вершин фигуры, представленное в виде списка.

На основании анализа понятия о многоугольнике, проведенного выше, можно предложить более детальный вариант реализации его класса:

class Figura

{

// Данные, характеризующие состояние объектов данного класса:

List<Point> PointList; // Список точек (вершин многоугольника))

Color bc, // Цвет контура

fc; // Цвет закраски

public:

Figura(); // Конструктор класса

// Свойства:

public BColor

{

set{ bc=value; }

get{ return bc; }

}

public FColor

{

set{ fc=value; }

get{ return fc; }

}

public void AddPoint(int x, int y); // Добавление новой вершины в фигуру

public void Draw(Graphics g){…}; // Рисование многоугольника

public void Move(int dx, int dy){…}; // Рисование многоугольника

// Определение попадания курсора в область фигуры

public bool IsInto(int xc, int yc){…};

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]