Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

7.7 Пользовательские типы данных

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

7.7.1Пользовательские типы

Задача реализации алгоритма часто упрощается, если в языке программирования предусмотрены, кроме примитивных, дополнительные типы данных. Многие современные языки программирования позволяют программистам определять свои типы данных, используя в качестве компоновочных блоков примитивные типы данных и структуры. Эти «самодельные» типы данных называются пользовательскими типами (user-defined types).

В качестве примера предположим, что нам нужно разработать программу, включающую множество переменных одной и той же неоднородной структуры, состоящей из имени, возраста и уровня знаний. Можно заново объявлять состав структуры каждый раз, когда требуется сослаться на такую структуру. Например, чтобы объявить переменную Employee с такой неоднородной структурой, С-программист написал бы:

struct

{char Name[8]:

int Age:

float Ski 11 Rating;

} Employee;

как на рис. 5.5 (см. главу 5).

Но в этом случае, если такая структура будет часто встречаться в тексте, программа может стать слишком громоздкой и трудной для чтения. Более того, без подробного изучения трудно узнать, что все структуры идентичны. Лучше определить неоднородную структуру как новый (пользовательский) тип данных и использовать этот тип так же, как если бы это был примитив.

Типичный пример такого подхода можно увидеть в языке программирования С, где новые типы определяются при помощи оператора typedef (сокращение от type definition, определение типа). Он состоит из зарезервированного слова typedef, за которым идет описание структуры нового типа, и заканчивается именем нового типа. Так, оператор

typedef struct {char Name[8]: 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.