Непейвода Н.Н. Программирование. Раздел 4

Непейвода Н.Н. Программирование. Страница 395

Конкретносинтаксические правила задания программистом перечисляе­мого типа различны, но все они сводятся к тому или иному способу задания набора литералов. Обычно литералы, определяемые программистом, — иден­тификаторы (Pascal^, C/C++ и др.). Имена литералов дополняют контекст, а потому должны подчиняться правилам локализации имен данного язы­ка. Можно сказать, что литералы выбираются из множества правомерных в данном контексте имен.

Рассмотрим некоторые преобразования перечислений как типов данных.

Из одного перечисления можно построить другое путем образования отрезка: нужно просто указать два значения из данного набора, одно из которых объявляется first, а другое — lastдля нового перечисления (новые firstslastв смысле исходного перечисления), при этом перечисленные выше операции наследуются. Таким образом, мы построили первый конструктор типа: конструктор отрезка. При всей простоте конструктор отрезка стро­ит структуру данных, удовлетворяющую требованиям абстрактных типов данных (см. § 9.1.5).

Конструктор отрезка показывает важный класс конструкторов типов, ко­торые в некотором смысле ограничивают тип, не усложняя его структуры. Типы, получаемые при помощи ограничений других типов, часто называют­ся выводимыми из них.

Если есть два перечисления, то можно построить инъективное отобра­жение меньшего по числу элементов в большее, естественно согласованное с упорядоченностью типов. Это очень важное для типов перечислений отоб­ражение называется вложением. Образ элемента а типа Т1 при вложении в тип12можно считать представлением а в типе12.

Вложение любого перечисления во множество значений целого типа яв­ляется стандартным реализационным представлением данного типа. Но вот какое из вложений выбрать — не всегда очевидно. Некоторые языки остав­ляют это на усмотрение разработчиков систем программирования (Pascal). В этом случае стандарт языка не фиксирует преобразования между различ­ными перечислениями, но и не запрещает их. В других (С/С++/С#) допус­кается явное задание отображений между перечислениями (в С/С++/С# — отображение в тип беззнаковых целых; по умолчанию для него устанавли­вается, что firstотображается в нуль).

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие "Крокодилы"

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама