Читайте также:
|
|
TUpperCase = 'A'..'Z'; TIndex = 1..100;
Связь ограниченного типа с его родительским типом устанавливается путем сопоставления величин в определении ограниченного типа с соответствующими величинами в ранее объявленном или встроенном порядковом типе. Тип TUpperCase в приведенном выше примере определен как ограниченный встроенный тип отдельных символов. Тип TIndex определен как ограниченный тип целых чисел.
В языке Ada ограниченные типы относятся к классу подтипов. Они не являются новыми типами, но лишь дают новые имена ограниченным версиям существующих типов. Предположим, что тип DAYS определен как в предыдущем разделе, и запишем следующее:
subtype WEEKDAYS is DAYS range Mon..Fri;
subtype INDEX is INTEGER range 1..100;
В этих примерах сужение существующих типов касается диапазона возможных значений. Все операции, определенные для породившего типа, определены и для подтипа, за исключением операции присваивания значений, не входящих в заданный диапазон. В следующих командах
DAY1: DAYS;
DAY2: WEEKDAYS;
DAY2:= DAY1;
присваивание разрешено только в случаях, когда значение переменной DAY1 не равно Sat или Sun. В языках Pascal и Modula-2, как и в языке Ada, подтипы наследуют все разрешенные родительскому типу операции.
Определяемые пользователем порядковые типы часто используются в качестве индексов массивов. Они также могут использоваться переменными циклов. В языке Ada, например, подтипы порядковых типов являются единственным способом указания переменных цикла for.
Отметим также, что в Ada ограниченные типы значительно отличаются от производных типов. Рассмотрим следующие объявления:
type DERIVED_SMALL_INT is new INTEGER range 1..100;
subtype SUBRANGE_SMALL_INT is INTEGER range 1..100;
Переменные обоих типов, DERIVED_SMALL_INT (производный тип) и SUBRANGE_SMALL_INT (подтип – ограниченный тип), наследуют область значений и операции над переменными типа INTEGER. Тем не менее, переменные типа DERIVED_SMALL_INT не совместимы ни с каким типом INTEGER, тогда как переменные типа SUBRANGE_SMALL_INT совместимы с величинами типа INTEGER и любого его подтипа.
Ограниченные типы улучшают читабельность программ, показывая, что переменные подтипа могут содержать только определенный диапазон значений. Надежность при использовании ограниченных типов повышается, поскольку присвоение переменной такого типа некоторого значения, лежащего вне разрешенного диапазона, диагностируется компилятором (если присваиваемое значение является литеральной величиной) или системой поддержки выполнения (если это переменная или выражение) как ошибка.
4.4.3. Реализация порядковых типов
Для реализации перечислимых типов необходимо установить соответствие между неотрицательными целым числами и символьными константами. Обычно по умолчанию первое из перечисляемых значений представляется числом 0, второе – числом 1 и так далее. Операции с переменными перечислимых типов значительно отличаются от операций с целыми числами, исключением являются только операторы отношений, идентичные для обоих случаев. Как указывалось ранее, перечислимые типы языков ANSI C и C++ рассматриваются как целые типы.
Ограниченные типы реализуются так же, как и породившие их типы, за исключением того, что в каждом операторе присваивания и в каждом выражении, которые содержат переменную ограниченного типа, компилятор должен выполнять неявную проверку выхода значения переменной за пределы допустимого диапазона. Это увеличивает размер программы и время ее выполнения, однако хорошо оптимизированный компилятор может минимизировать количество проверок.
Лекция 16 НЕОИНСТИТУЦИОНАЛИЗМ.
Дата добавления: 2014-12-15; просмотров: 115 | Поможем написать вашу работу | Нарушение авторских прав |
|