Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплект Информатика / Курс лекций.doc
Скачиваний:
128
Добавлен:
22.05.2015
Размер:
4.8 Mб
Скачать

Int Age;

float SkillRating;

} EmployeeType;

определяет новый тип под названием EmployeeType, состоящий из неоднородной структуры, содержащей Name (Имя), Age (Возраст) и SkillRating (Уровень знаний). При помощи этого нового типа можно объявлять переменные в точности так же, как переменные примитивных типов. В частности, переменная Employee объявляется в следующем операторе:

EmployeeType Employee;

Преимущества такого пользовательского типа данных становятся заметнее при объявлении нескольких переменных. Так же, как на языке С программист может объявить Sleeve, Waist и Neck как переменные примитивного типа real в операторе

float Sleeve, Waist. Neck;

оператор

EmployeeType DistManager, SalesRepl, SalesRep2;

определяет три переменные — DistManager, SalesRepl и SalesRep2, как переменные типа EmployeeType.

Важно разделять определение пользовательского типа данных и фактические элементы данных этого типа. Последние называются экземплярами этого типа (instance). Определение пользовательского типа данных — это шаблон, который используется для создания экземпляров этого типа. Он описывает свойства, общие для всех экземпляров такого типа, но не объявляет реальный элемент, обладающий этими свойствами (так же, как шаблон для вырезания печенья используется для создания печенья, но сам им не является). В предыдущем примере пользовательский тип EmployeeType использован для создания трех экземпляров этого типа, известных под именами DistManager, SalesRepl и SalesRep2.

2 Классы

Хотя концепция пользовательских типов имеет множество преимуществ, она не позволяет создавать новые типы данных в полном смысле этого слова. Вспомните, что определение типа данных состоит из двух частей: предопределенной системы хранения (например, система дополнительных кодов в случае типа integer или система с плавающей точкой для типа real) и набора предопределенных операций (например, сложение и вычитание). Традиционные пользовательские типы позволяют программистам только определять новые системы хранения. Они не предоставляют способов определения операций, которые можно производить с данными в этих структурах.

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

Листинги 1 и 2 показывают, как класс с именем StackOfIntegers может быть определен на языках C++, С# и Java. Далее мы вкратце рассмотрим подробности этих примеров, но сейчас заметим лишь, что в каждом примере в классе StackOfIntegers определены две переменные экземпляра (массив целых чисел с названием StackEntries и целое число StackPointer, которое используется для идентификации вершины стека внутри массива —, две процедуры (с именами push и pop) и конструктор, который устанавливает максимальный объем стека при создании каждого экземпляра стека.

Листинг 1. Стек целых чисел (реализация на C++)1

class StackOfIntegers

{private: