Иллюстрированный самоучитель по Tirbo Pascal




Совместимость и преобразование типов - часть 2


  • T1 и T2 - совместимые множества и все члены T2 принадлежат множеству возможных значений T1;
  • T1 и T2 - совместимые указатели;
  • T1 и T2 - совместимые процедурные типы;
  • T1 - объект и T2 - его потомок.
  • В программе данные одного типа могут преобразовываться в данные другого типа. Такое преобразование может быть явным или неявным.

    При явном преобразовании типов используются вызовы специальных функций преобразования, аргументы которых принадлежат одному типу, а значение - другому. Таковыми являются уже рассмотренные функции ORD, TRUNC, ROUND, CHR. В гл. 6 описывается функция PTR, преобразующая четырехбайтный целочисленный аргумент к типу-указателю.

    В Турбо Паскале может использоваться и более общий механизм преобразования типов, согласно которому преобразование достигается применением идентификатора имени) стандартного типа или типа, определенного пользователем, как идентификатора функции преобразования к выражению преобразуемого типа (так называемое автоопределенное преобразование типов). Например, допустимы следующие вызовы функций:

    type

    МуТуре = (а, Ь, с, d);

    .....

    МуТуре (2) 

    Integer ('D') 

    pointer (longint(a)+ $FF)

    Char (127 mod c) 

    Byte (k)

    При автоопределенном преобразовании типа выражения может произойти изменение длины его внутреннего представления (длина может увеличиться или уменьшиться).

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

    type

    byt = array [1..2] of Byte;

    int = array [1..2] of Integer;

    rec = record

    x, у : Integer 

    end; 

    var

    vbyt : byt;

    vint : int;

    vrec : rec; 

    begin

    byt(vint[1])[2] := 0;

    int(vrec)[1] := 256 




    Содержание  Назад  Вперед