Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая 3курс.docx
Скачиваний:
3
Добавлен:
20.12.2018
Размер:
95 Кб
Скачать
☆
  1. Базовый класс «Очередь»

  2. Класс «LIFO»

  3. Класс «FIFO».

  4. Идентификация семантики классов

Рассмотрим каждый класс в отдельности.

Базовый класс (class TTurn)

Структура класса:

  1. Поля:

head – начало очереди

tail – конец очереди

p – вспомогательная переменная для работы с очередями

Данные поля являются защищенными (protected) - элементы класса доступны внутри класса, в котором они объявлены, и в производных от него классах.

  1. Конструктор.

Конструктор представляет собой специальный метод класса, позволяющий создавать объекты класса. Одна из синтаксических особенностей этого метода в том, что его имя должно совпадать с именем класса.

TTurn ()

  1. Деструктор

Деструктор — это особый вид метода, применяющийся для освобождения памяти, занимаемой объектом. Описывать в классе деструктор явным образом требуется в случае, когда объект содержит указатели на память, выделяемую динамически - иначе при уничтожении объекта память, на которую ссылались его поля-указатели, не будет помечена как свободная.

  1. Методы

Методы - процедуры и функции, связанные с классом. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять.

void Clear () – метод очистки очереди

int Length () – метод вычисления длинны очереди

void Write () – метод вывода очереди на экран

void Delete () – метод удаления одного элемента очереди

int Take () – метод доступа к элементу.

Так как класс «TTurn» является базовым, то методы в нем являются общедоступными (public). К общедоступным свойствам и методам можно получить доступ без каких либо ограничений.

Класс «LIFO» (class TLifo)

Структура класса:

  1. Поля:

Поля полностью наследуются из базового класса.

  1. Конструктор:

TLifo()

  1. Методы:

void operator + (int k) – метод добавления одного элемента в LIFO.

Класс «FIFO» (class TFifo)

Структура класса:

  1. Поля:

Поля полностью наследуются из базового класса.

  1. Конструктор:

TFifo()

  1. Методы:

void operator + (int k) – метод добавления одного элемента в FIFO.

  1. Идентификация отношений между классами

Просмотрев еще раз Диаграмму2 становится понятным, что между классами существуют отношения типа is-a, т.е. отношения наследования. Наследование — это возможность создания иерархии классов, когда потомки наследуют все свойства своих предков, могут их изменять и добавлять новые. Наследование бывает двух видов: простое и множественное.

Простым называется наследование, при котором производный класс имеет одного родителя.

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

В данной задаче мы сталкиваемся с простым наследованием

Рассмотрим некоторые особенности реализации наследования.

Во-первых, при описании класса в его заголовке перечисляются все классы, являющиеся для него базовыми. Возможность обращения к элементам этих классов регулируется с помощью ключей доступа private, protected и public. Этот ключ определяет вид наследования: открытое (public), защищенное (protected) или закрытое (private). К примеру, синтаксис класса «LIFO»:

class TLifo : public TTurn

{

Тело класса

}

В этом варианте продемонстрирован ключ доступа public. Используя ключи доступа необходимо учитывать, что private элементы базового класса в производном классе недоступны вне зависимости от ключа. Обращение к ним может осуществляться только через методы базового класса. Элементы protected при наследовании с ключом private становятся в производном классе private, в остальных случаях права доступа к ним не изменяются. Доступ к элементам public при наследовании становится соответствующим ключу доступа.

Во-вторых, для различных методов класса существуют разные правила наследования.

Например, конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы. Порядок вызова конструкторов определяется приведенными ниже правилами:

  1. Если в конструкторе производного класса явный вызов конструктора базового класса отсутствует, автоматически вызывается конструктор базового класса по умолчанию (то есть тот, который можно вызвать без параметров).

  2. Для иерархии, состоящей из нескольких уровней, конструкторы базовых классов вызываются, начиная с самого верхнего уровня. После этого выполняются конструкторы тех элементов класса, которые являются объектами, в порядке их объявления в классе, а затем исполняется конструктор класса.

  3. В случае нескольких базовых классов их конструкторы вызываются в порядке объявления.

Ниже перечислены правила наследования деструкторов,

  1. Деструкторы не наследуются, и если программист не описал в производном классе деструктор, он формируется по умолчанию и вызывает деструкторы всех базовых классов.

  2. В отличие от конструкторов, при написании деструктора производного класса в нем не требуется явно вызывать деструкторы базовых классов, поскольку это будет сделано автоматически.

  3. Для иерархии классов, состоящей из нескольких уровней, деструкторы вызываются в порядке, строго обратном вызову конструкторов: сначала вызывается деструктор класса, затем — деструкторы элементов класса, а потом деструктор базового класса.