|
||||||||
|
Структурные типы.
Структурные типы
На элементарном уровне наиболее
полезными типами данных являются те, в которых содержится численная и строковая
(символьная) информация. Объединив несколько образцов этих элементарных
типов, можно создавать более сложные типы данных.
Перечисленные типы сами по себе обычно являются не типами, а структурными методами дополнения существующих типов. Записи
record
Данное объявление состоит из фиксированной и вариантной частей. Однако вовсе не обязательно вставлять в одно объявление записи обе эти части. Обычно удобнее работать с каждой из этих частей отдельно. Фиксированные записи
record
Имея доступ к информации в записи, можно обрабатывать всю запись целиком (все поля одновременно) или только отдельное поле. Для обращения к отдельному полю наберите имя записи, точку и идентификатор поля, например MyRec.Fieldnamel Для доступа ко всей записи просто укажите ее имя.
Совет: В языке С эквивалентом фиксированного типа record из Delphi является struct. В C++ также определен тип struct, синтаксис которого совместим с типом struct из С. Однако в C++ этот тип имеет дополнительные особенности, благодаря чему напоминает тип Class из Delphi. Вариантные записи
record
Совет: Термин вариантный в отношении записей не имеет ничего общего с типом Variant, который мы рассмотрим в следующем разделе данной главы. Вариантные поля, несмотря на свое название, никогда не имеют тип Variant. Объявление этого типа в любом месте вариантной части записи запрещено. Все варианты занимают в памяти одно место. Каждый
вариант обозначается некоторой постоянной. При желании можно получать доступ
ко всем полям всех вариантов одновременно, однако это может иметь смысл
только в наиболее простых случаях, когда точно известно, как именно информация
каждого варианта записывается в память.
Совет: В С и C++ эквивалентом вариантному типу записи из Delphi является тип union. Массивы
array [ordinal_type] of type_definition;
Каждый массив содержит некоторое количество элементов
информации одного типа. Для обращения к элементу массива надо указать имя
массива и индекс элемента, заключенный в квадратные скобки. Обратите внимание,
что число элементов массива в каждом измерении задается порядковым типом
(ordinal_type). Для этого можно воспользоваться идентификатором некоторого
типа (например, Boolean или AnsiChar), однако на практике обычно явно задается
поддиапазон целых.
var MyArray: Array [1..10] of Integer; Тогда обращение к его третьему элементу будет выглядеть, как MyArray[З], и выполняться, как к переменной Integer.
Совет: Понятие массива существует в большинстве языков программирования, однако синтаксис, как правило, в каждом случае свой. В языках Basic и FORTRAN вместо квадратных скобок применяются круглые. В С и C++ элементы массива нумеруются с нуля, в FORTRAN ? с единицы. В Basic нумерация начинается с нуля или единицы, в зависимости от результата последнего выполнения оператора OPTION BASE. В некоторых версиях Basic можно задавать верхнее и нижнее значения индексов, как это делается в Delphi. В С и C++ обращение к массиву эквивалентно обращению к его первому (нулевому) элементу. В Delphi это будет обращением ко всему массиву. Множества
Set of ordinal type Минимальный и максимальный порядковые номера исходного типа (на основе которого определяется множественный тип) должны быть в пределах между 0 и 255. Переменная множественного типа содержит (или не содержит) любое значение исходного порядкового типа. Каждое значение из заданного диапазона может принадлежать или не принадлежать множеству. Рассмотрим следующий пример. Type CharSet = set of AnsiChar; // Тип множества
символов. ANSI.
Переменная set может содержать все элементы множества или не содержать ни одного. При присвоении значения переменной множественного типа элементы множества (порядковые значения) указываются в квадратных скобках: MyAlphaSet := ['А', 'Е', 'Г, 'О', 'U', 'Y']; // Все прописные гласные. Пустые квадратные скобки задают пустое множество, не содержащее ни одного элемента. Это относится ко всем множественными типам.
Совет: Во многих языках структурный множественный тип отсутствует. Вместо него можно применять что-либо наподобие битовых образов или битовых полей. Файловый тип
file of Typel // Файл определенного типа, содержащий
Механизм ввода-вывода информации как никакой другой
аспект программирования зависит от языка и реализации. В большинстве случаев
предполагается, что программисту незачем вникать во внутреннюю структуру
переменных, управляющих вводом-выводом, и при передаче информации следует
полностью полагаться на предназначенные для этого процедуры. Их реализация
должна оставаться чем-то наподобие черной магии. В Basic файлы обозначаются
числовыми значениями ? дескрипторами. В C/C++ программисты манипулируют
указателями на структуру FILE. И только в Delphi файловая структура ? это
переменная.
| ||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |