Коднянко В.А.
Программирование на языке Object Pascal в среде Delphi

 

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

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

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

8.1. Совместимость по вычислению

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

  1. Типы операций и операндов эквивалентны.
  2. Например, нельзя применять арифметические операции к логическим переменным и, наоборот, логические операции – к арифметическим переменным:

    Type

    R1, R2 : Real;

    L1, L2 : Integer;

    B1, B2: boolean;

    ...

    Not (R1 + R2) B1 + B2 'Иванов' + ' ' + 'Петр' {недопустимые выражения}

  3. Типы операндов эквивалентны.
  4. Типы операндов целые или вещественные, например:
  5. R1 + R2 L1 + R2 L2 / R1 / L1 {допустимые выражения}

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

    Type

    L11, L12 : Integer;

    K : -199 .. 199;

  1. Типы являются множествами, причем их базовые типы совместимы.

    Type

    L : set of 21 .. 2141;

    K : set of -199 .. 199;

  1. Один тип является строковым, а другой – также строковым либо символьным.
  2. Type

    L : String [34]; Q : String [23]; K: Char;

  3. Один тип является ссылочным, а другой – также ссылочным либо безтиповым указателем.
  4. Оба типа являются упакованными символьными массивами с одинаковым числом элементов.
  5. Один тип является строковым, а другой – также строковым типом, либо упакованным символьным массивом, либо символьным типом.
  6. Один имеет тип Variant, а другой – тип integer, real, string, character или Boolean.
  7. Оба типа операндов являются процедурными типами с одинаковым количеством параметров и идентичными порядковыми типами этих параметров. Для функций должны быть идентичны и типы результата.

8.2. Совместимость по присваиванию

Оператор присваивания считается корректным, если тип переменной, расположенной в его левой части, совместим с типом выражения, располо-женного в правой части. Выражение T2 может быть присвоено переменной T1, если будут соблюдены следующие условия.

  1. Оба типа T1 и Т2 идентичны. Недопустимо присваивание файловых типов или структур, содержащих файловые типы (о файловых типах подробнее см. гл. 17).
  2. T1 и Т2 имеют совместимые простые типы.
  3. T1 и Т2 имеют вещественные типы.
  4. T1 и Т2 имеют целые типы.
  5. T1 и Т2 имеет тип PChar или другой строковый тип, и выражение представляет строковую константу.
  6. T1 и Т2 имеют строковые типы.
  7. T1 имеет строковый тип, а Т2 – символ или упакованная строка.
  8. T1 – длинная строка, а Т2 имеет тип PChar.
  9. T1 и Т2 имеют совместимые типы упакованных строк.
  10. .T1 и Т2 имеют совместимые множественные типы.
  11. .T1 и Т2 имеют совместимые Pointer-типы.
  12. .T1 имеет тип PChar или PWideChar, а T2 есть символьный массив вида array[0 .. n] of Char.
  13. .T1 и T2 имеют совместимые процедурные типы.
  14. .T1 имеет тип Variant, а T2 – один из типов integer, real, string, character или Boolean.
  15. .T1 имеет тип integer, real, string, character или Boolean, а Т2 – тип Variant.

 

 

 

 

</body> </html>