Учебник по Delphi 4.0 - [8]

Шрифт
Интервал

Физически строки с нуль-окончанием подобны массивам символов с нумерацией элементов от нуля, наподобие array [0. X] of char, где Х — некоторое положительное целое, большее нуля, хотя никаких объявлении подобного рода не происходит. Вместо этого определяется переменная-указатель P Char и распределяется необходимый объем памяти. При необходимости строке AnsiString можно присвоить тип P Char.

В табл. 1.7 перечислены некоторые процедуры и функции обработки данных строковых типов.



Совет: Программисты, работающие на С, привыкли записывать все строки в массивы с нуль-окончанием. Фактически они применяют в выражениях не строковые переменные, а указатели на них. Программисты, работающие на Basic, привыкли использовать строку как одно целое. Для типа AnsiString из Delphi годятся оба подхода.

Структурные типы

На элементарном уровне наиболее полезными типами данных являются те, в которых содержится численная и строковая (символьная) информация. Объединив несколько образцов этих элементарных типов, можно создавать более сложные типы данных.

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

Ниже перечислены структурные типы, определенные в Delphi.


Записи

Массивы

Множества

Файлы

Классы

Указатели на классы

Перечисленные типы сами по себе обычно являются не типами, а структурными методами дополнения существующих типов.

Записи

С помощью зарезервированного слова record (запись) в одном типе можно объединять данные разных типов. Общий синтаксис объявления этого типа выглядит следующим образом:

record

fieldnamel: fieldtypel;

fieldname2, fieldname3: fieldtype2;

case optional tagfield: required ordinal type of

1: variantnamel: varianttype3;

2, 3: variantname2: varianttype4;

end;

Данное объявление состоит из фиксированной и вариантной частей. Однако вовсе не обязательно вставлять в одно объявление записи обе эти части. Обычно удобнее работать с каждой из этих частей отдельно.

Фиксированные записи

В фиксированной части записи определяется одно или несколько независимых полей. Каждому полю обязательно присваивается имя и тип:

record

fieldnamel: fieldtypel;

fieldname2, fieldname3: fieldtype2;

end;

Имея доступ к информации в записи, можно обрабатывать всю запись целиком (все поля одновременно) или только отдельное поле. Для обращения к отдельному полю наберите имя записи, точку и идентификатор поля, например

MyRec.Fieldnamel

Для доступа ко всей записи просто укажите ее имя.

Совет: В языке С эквивалентом фиксированного типа record из Delphi является struct. В C++ также определен тип struct, синтаксис которого совместим с типом struct из С. Однако в C++ этот тип имеет дополнительные особенности, благодаря чему напоминает тип Class из Delphi.

Вариантные записи

Вариантная часть типа record дает возможность по-разному трактовать область памяти, совместно занимаемую вариантами поля:

record

case optional tagfield: required ordinal type of

1: variantnamel: varianttype3;

2, 3: variantname2: varianttype4;

end;

Совет: Термин вариантный в отношении записей не имеет ничего общего с типом Variant, который мы рассмотрим в следующем разделе данной главы. Вариантные поля, несмотря на свое название, никогда не имеют тип Variant. Объявление этого типа в любом месте вариантной части записи запрещено.

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

Каждый вариант обозначается минимум одной константой. Все константы должны быть порядковыми и совместимыми по типу с меткой поля.

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

Необязательное поле можно не указывать, однако порядковый тип необходим. При отсутствии необязательного поля программе придется выбирать подходящий вариант каким-то иным образом.

Данные некоторых типов бессмысленно интерпретировать различным образом, и в Object Pascal на некоторые критические типы наложено соответствующее ограничение. Как следствие, в вариантную часть записи нельзя включать длинные строки и переменные типа Variant, а также структурные переменные, содержащие эти типы.

Совет: В С и C++ эквивалентом вариантному типу записи из Delphi является тип union.

Массивы

Массивы могут быть одно — или многомерными, как в следующем примере.

array [ordinaltype] of typedefinition;

array [ordinal typel, ordinal type2] of type definition;

Каждый массив содержит некоторое количество элементов информации одного типа. Для обращения к элементу массива надо указать имя массива и индекс элемента, заключенный в квадратные скобки. Обратите внимание, что число элементов массива в каждом измерении задается порядковым типом (ordina


Еще от автора Неизвестный Автор
Галчонок

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


Призраки ночи

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


Закат  вечности

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


mmmavro.org | День 131, Победа

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


mmmavro.org | День 132, Поэт

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


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


Рекомендуем почитать
Теория литературы. Чтение как творчество

Цель предлагаемого пособия – систематизировать и обогатить представления о природе, структуре и особенностях художественной литературы как вида искусства, помочь совершенствованию читательского мастерства. Книга снабжена кратким словарем основных литературоведческих понятий и терминов (составлен при участии доцента О.В. Быстровой).Для студентов филологических факультетов, учителей, преподавателей литературы высших и средних учебных заведений.


Язык программирования PHP

PHP, в настоящее время, – один из наиболее популярных языков для реализации веб-приложений. Данный курс посвящен изучению его основ. Акцент делается на практическое применение полученных навыков. Язык PHP был создан для решения конкретной практической задачи в среде интернет (какой именно можно узнать, прочитав первую лекцию курса). Мы тоже постараемся не отвлекаться слишком сильно на теоретические рассуждения, и будем стремиться к решению какой-нибудь конкретной задачи в каждой из лекций. Большинство примеров взяты из реально существующей системы: виртуального музея истории информатики.


Острая кривошея у детей: Пособие для врачей

Монография посвящена самому частому вертебрологическому заболеванию у детей, обозначенному как синдром «острой кривошеи». В рамках изучения проблемы большое внимание уделено особенностям строения шейного отдела позвоночника у детей. Предложена собственная теория развития синдрома у большинства пациентов. Представлены алгоритмы дифференциальной диагностики и варианты лечения. Книга предназначена для детских хирургов, ортопедов-травматологов, врачей восстановительной медицины, остеопатов, специалистов по лучевой диагностике.


Перестройка в церковь

Слово «миссионер» привычно уже относить к католикам или протестантам, американцам или корейцам. Но вот перед нами книга, написанная миссионером Русской Православной Церкви. И это книга не о том, что было в былые века, а о том, как сегодня вести разговор о вере с тем, кто уже готов спрашивать о ней, но еще не готов с ней согласиться. И это книга не о чужих победах или поражениях, а о своих.Ее автор — профессор Московской Духовной Академии, который чаще читает лекции не в ней, а в светских университетах (в год с лекциями он посещает по сто городов мира)


Священное Писание Ветхого Завета. Часть 1

Книга священника Геннадия Егорова представляет собой общее введение в изучение Священного Писания Ветхого Завета. В ней дается обзор ветхозаветной истории и содержания законоположительных, исторических, учительных и пророческих книг Ветхого Завета. Основной акцент сделан на их мессианском содержании и прочтении с точки зрения Нового Завета. В тексте использовано большое количество святоотеческих толкований и богослужебных текстов. Книга снабжена приложением, в котором собраны фрагменты из творений святых отцов и православных богословов, позволяющие глубже ознакомиться с темами курса.Предлагаемое издание предназначено в первую очередь для слушателей системы дополнительного образования.


Древняя Греция

Книга состоит из небольших рассказов, посвященных наиболее важным социально-экономическим и общественно политическим событиям древней Греции, и предназначена для внеклассного чтения учащихся VI классов.