Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_inf_2.doc
Скачиваний:
1
Добавлен:
07.09.2019
Размер:
1.3 Mб
Скачать

2.5. Совместимость типов

В Turbo Pascal различают два вида совместимости типов: совместимость в выражении и совместимость по присваиванию. Совместимость первого вида позволяет операндам разных типов присутствовать в одном выражении. Правила второго вида совместимости (которые менее строги) определяют, в каких случаях справа и слева от оператора присваивания могут фигурировать выражения разных типов.

2.5.1. Совместимость в выражении. Два типа данных считаются совместимыми в выражении, если соблюдается хотя бы одно из следующих условий.

• Типы идентичны.

• Оба типа принадлежат вещественным типам (возможно, разным).

• Оба типа принадлежат целочисленным типам (возможно, разным).

• Один тип представляет собой поддиапазон другого.

• Оба типа представляют собой поддиапазоны одного и того же третьего (базового) типа.

• Оба типа представляют собой множества с совместимыми базовыми типами.

• Один тип является строковым, а второй – строковым либо символьным.

• Один тип является нетипизированным указателем (POINTER), второй – любым другим ссылочным типом.

2.5.2. Совместимость по присваиванию. Выражение считается совместимым по присваиванию с переменой, если соблюдается одно из следующих условий.

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

• Оба принадлежат совместимым порядковым типам, и при этом возможные значения выражения принадлежат диапазону значений, допустимых для переменной.

• Оба принадлежат вещественным типам, и при этом возможные значения выражения принадлежат диапазону значений, допустимых для переменной.

• Переменная относится к одному из вещественных типов, выражение – одному из целочисленных типов, и при этом все возможные значения выражения принадлежат диапазону значений, допустимых для переменной.

• Переменная принадлежит строковому типу, а выражение –символьному.

• Оба принадлежат совместимым множественным типам и при этом возможные значения выражения принадлежат диапазону значений, допустимых для переменной.

• Оба являются совместимыми типами указателей.

Если переменная и выражение совместимы по присваиванию, данное выражение может быть присвоено переменной и при этом ошибки зафиксировано не будет.

2.6. Приведение типов

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

var

х:type1;

y:type2;

После того как переменные Х и Y в программе получат некоторые значения, допустимы такие операторы присваивания:

x:=tуре1(у);

y:=tуре2(х);

В первом операторе значение переменной Y (типа type2) трактуется как принадлежащее типу type1 и присваивается переменной Х (т.е. тип 2 приводится к типу tуре1). В этом случае данные типа tуре2 рассматриваются как данные tуре1, к которым просто можно обратиться с помощью идентификатора Y. Второй оператор проделывает то же со значением переменной X, которое присваивается переменной Y.

Конкретизируем пример. Предположим, что type1 – это Char, а type2Byte. Известно, что для переменных этих типов требуется один байт памяти, поэтому при преобразовании из одного типа в другой данные в этом случае ни расширяются, ни сокращаются. Для переменных X и Y допустимы операторы присваивания:

x:=byte(у);

y:=char(х);

Здесь первый оператор присваивает переменной X (принадлежащей типу Char) значение переменной Y (типа Byte), представляя его при этом тоже как принадлежащее типу Char. А второй оператор приводит тип Char к типу Byte.

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

Помимо приведения типов переменных, Turbo Pascal допускает приведение типов значений:

tуре(ехрression);

Здесь expression – выражение, принадлежащее некоторому типу, которое данный оператор позволяет трактовать как принадлежащее типу Туре (т.е. выражение Expression здесь приводится к типу Туре), например:

Byte(‘F’);

Здесь выражение 'F' приводится к типу Byte (т.е. символ преобразуется в соответствующий код). Еще пример:

Char(77);

В этом случае целочисленное значение (являющееся частным случаем выражения) 77 преобразуется в символ, соответствующий данному коду. Несколько примеров приведения типов можно видеть в табл.17.

Таблица 17

Примеры приведения типов

Дейтвие

Результат

Boolean(0)

False

Boolean(1)

True

Char(57)

‘9’

Integer(‘9’)

57

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

Разумеется, приведение типов возможно для данных не только стандартных, но и созданных пользователем типов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]