Совместимость и преобразование типов.


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

 

Паскаль является строго типизированным языком. Это означает:

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

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

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

 

1 уровень: Эквивалентность или тождественность типов.

Существует две стороны (1 и 2) эквивалентности типов:

1) В секции описания типов два типа считаются эквивалентными, если в секции Type тип Т2 явно указан эквивалентным типу Т1 использованием знака “=”.

Type

T2 = T1

2) Две переменные V1 и V2 считаются принадлежащими к одному и тому же типу, если:

- в секции Var справа от двоеточия при объявлении переменных присутствует один и тот же идентификатор (но не описание) типа, например: Var V1 : T1; V2 : T1;

- переменные V1 и V2 объявляются в одной секции Var, причем перечисляются через запятую так, чтобы справа от двоеточия оказался один и тот же тип.

 

ПРИМЕРЫ тождественности и не тождественности типов:

Пример1:

Type

T1 = array [1..5] of byte;

T2 = array [1..5] of byte;

T3 = T1;

Согласно этому объявлению, типы T1 и T2 не эквивалентны, хотя имеют одно и то же описание типа. Типы Т3 и Т1, согласно последней строке, являются эквивалентными.

Пример2:

Var

они (V1 и V2) эквивалентны только между собой (нельзя обеспечить в программе эквивалентность им по типу никакой другой переменной)
V1, V2: array [1..5] of byte;

V3: array [1..5] of byte;

V4: T1;

V5: T1;

V6: T1;

Из этого описания следует:

- переменные V1 и V2 в этом описании имеют эквивалентный тип, потому что они перечисляются слева от одного и того же типа;

- переменная V3 не совместима по типу с переменными V1 и V2;

- переменные V4, V5 и V6 объявляется с типом Т1 и, согласно данному выше определению, имеют тип Т1, эквивалентный Т3.

Правило эквивалентности типов необходимо соблюдать только при вызове процедур и функций. Оно означает, что типы формальных параметров-переменных и соответствующих им фактических параметров должны быть тождественны или эквивалентны.

 

2 уровень: Совместимость типов.

Типы являются совместимыми, если:

Þ они тождественны;

Þ оба вещественны;

Þ оба целые;

Þ один тип является поддиапазоном другого;

Þ оба типа являются строками с одинаковой объявленной длиной;

Þ оба типа строковые без указания длины;

Þ …………………………………………..

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

Например, нельзя писать: ‘a’>5 . Однако можно так: byte(‘a’) > 5;

приведение типа значения

 

3 уровень: Совместимость по присваиванию (менее жесткие, чем в предыдущем случае, требования).

При следующих объявлениях:

Type

T1 = ...

T2 = ...

Var

V1: T1

V2: T2

оператор присваивания вида

V1 := V2;

не вызовет сообщения об ошибке, связанной с несовместимостью типов, если:

- T1 и T2 тождественны или эквивалентны;

- T1 и T2 являются совместимыми порядковыми типами и значение V2 лежит в диапазоне возможных значений V1;

- T1 и T2 - вещественные типы и значение V2 лежит в диапазоне возможных значений переменной V1;

- если T1 - вещественный, а T2 - целый тип (наоборот - нельзя!);

- если T1 - строковый, а T2 - символьный или строковый тип.

Нарушение правил совместимости типов обнаруживается обычно на стадии компиляции и сопровождается выдачей сообщения Type mismatch:

 

Var

i, j : integer;

x, y : real;

begin

i := 25;

x := 1.25;

y := i; //правильно

j := x; //ошибка

...............

 

 



Дата добавления: 2016-05-28; просмотров: 1694;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.