|
Языки программирования со строгой типизацией построены на основе соблюдения концепции типов, в соответствии с которой все операции, определенные в языке, могут применяться только к операндам совместимых типов. Два типа считаются совместимыми, если: • оба ини есть один и тот же тип; • оба вещественные; • оба целые; • один тип есть тип-диапазон второго типа; • оба являются типами-диапазонами одного и того же базового типа; • оба являются множествами, составленными из элементов одного и того же базового типа; • один тип – есть тип-строка, а другой – тип-строка или символ; • один тип есть любой указатель, а другой – нетипизированный указатель; • оба есть процедурные типы с обинаковым типом результата (для функций), количеством параметров и типом взаимно соответствующих параметров. Два объекта совместимы по представлению, если размеры их элементов хранения равны. Объекты совместимы по присваиванию, если в элемент хранения объекта одного типа может быть занесено значение элемента хранения другого объекта или значение выражения. Совместимость по присваиванию реализуется через приведение и преобразование типов. Приведение типа возможно только для объектов, совместимых по представлению. Приведение типа состоит в следующем: определяя тип объекта, мы определяем представление (структуру) элемента хранения объекта данного типа. Но если “взглянуть” на образ объекта в памяти с точки зрения машинного представления другого типа, то можно трактовать тот же самый элемент хранения как принадлежащий другому типу. Для этого используются функции приведения типов: Функция приведения: Имя_типа ( Имя_переменной ) Имя_типа ( Выражение ).
Функции приведения типа определены как для стандартных, так и для пользовательских типов. Функции приведения типов могут использоваться как в левой, так и в правой части оператора присваивания, т.к. приведение типа не изменяет внутреннего представления объекта, а изменяет только его интерпретацию. Преобразование типа изменяет внутреннее представление объектов, т.е. их элементы хранения. При выполнении преобразования к типу большей мощности, у которого размер элемента хранения больше, значения атрибутов объекта будут целиком записаны в младшие байты. Если выполняется преобразование к типу меньшей мощности, от элемента хранения объекта берутся только младшие байты. Таким образом, в результате преобразования типа длина внутреннего представления объекта может как увеличиться, так и уменьшиться. Преобразование типа может быть явным, неявным и автоопределенным. Неявное преобразование возможно в выражениях, составленных из вещественных и целочисленных переменных, переменные типа INTEGER автоматически преобразуются к типу REAL, и все выражение в целом приобретает вещественный тип. Явные преобразования связаны с использованием специальных функций преобразования, определенных в языке, аргументы которых принадлежат одному типу, а значения - другому. Автоопределенное преобразование связано с использованием только в правой части оператора присваивания функций преобразования вида: Имя_типа ( Имя_переменной ) Имя_типа ( Выражение ). Функции преобразования типа определены как для стандартных, так и для пользовательских типов.
|