Четвер, 25.04.2024, 03:23
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Вам легко дається програмування
Всього відповідей: 2
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


Эквивалентность и совместимость типов

Эквивалентность типов

В языке программирования Паскаль строго определено, какие типы описывают идентичные множества значений (т.е эквивалентны). В языке принят принцип именной эквивалентности типов, устанавливающий, что два типа T1 и T2 эквивалентны, если выполняется одно из следующих условий.

  • T1 и T2 — одно и то же имя типа.
  • Тип T2 описан с использованием типа T1 равенством вида type T2=T1; или последовательностью подобного вида равенств. Например:

 

type
 T1=integer;
 T3=T1;
 T2=T3;

 

Так, несмотря на абсолютную идентичность, приведенные ниже типы не являются эквивалентными.

 
type
 tp1 = array[1..10] of real;
 tp2 = array[1..10] of real;

 

Если переменные описаны совместно, то они обладают эквивалентными типами. Например:

 
var
 v1, v2: tp1;

 

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

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

  • Оба типа эквивалентны.
  • Оба типа целые.
  • Оба типа вещественные.
  • Один из типов имеет интервальный тип, а другой тип является для него базовым:

 

type
 tp1 = integer;
 tp2 = -1..1000;

 

  • Оба типа являются диапазонами одного и того же базового типа

 

type
 tp1 ='a'..'z';
 tp2 = 'a'..'f';

 

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

 

type
 tp1 = set of byte;
 tp2 = set of 1..100;

 

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

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

Кроме понятий эквивалентности и совместимости типов в Pascal введено понятие совместимости по присваиванию.

  • Оператор присваивания корректен, если тип переменной в его левой части совместим по присваиванию с типом выражения в правой части. Для этого должно выполняться хотя бы одно из условий.
  • Оба типа эквивалентны, но ни один из них не является файловым типом или сложным типом, использующим файловый тип.
  • Оба типа — совместимые дискретные типы, и текущее значение типа t2 попадает в диапазон возможных значений типа t1.
  • Оба типа вещественные, и текущее значение типа t2 попадает в диапазон возможных значений типа t1.
  • Тип левой части вещественный, а тип правой части — целый.
  • Тип t1 является строковым, а t2 — либо строковый, либо символьный, либо упакованный символьный массив.
  • Оба типа представляют собой упакованные символьные массивы.
  • Оба типа — совместимые множественные типы, причем множество из правой части целиком входит во множество, указанное в левой части.
  • Оба множества — совместимые ссылочные типы.
  • Тип левой части процедурный, а правая часть представляет собой имя процедуры или функции с тем же числом параметров, что и у типа в левой части; типы соответствующих параметров (а также типы результата для функции) должны быть эквивалентными.
  • Оба типа являются объектными, причем тип t2 является потомком типа t1.
  • Оба типа - ссылочные типы на совместимые объектные типы.

 

Форма входа
Пошук
Друзі сайту
Календар
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

Єдина Країна! Единая Страна!