Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

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

Совместимость по присваиванию необходима, если имеет место

присваивание значения, например, в операторе присваивания или при

передаче значений параметров.

Значение типа T1 является совместимым по присваиванию с ти-

пом T2 (то есть допустим оператор T1:=T2), если выполняется одно

из следующих условий:

* T1 и T2 имеют тождественные типы, и ни один из них не яв-

ляется файловым типом или структурным типом, содержащим

компонент с файловым типом на одном из своих уровней.

* T1 и T2 являются совместимыми порядковыми типами, и значе-

ния типа T2 попадают в диапазон возможных значений T1.

* T1 и T2 являются вещественными типами, и значения типа T2

попадают в диапазон возможных значений T1.

* T1 является вещественным типом, а T2 является целочислен-

ным типом.

* T1 и T2 являются строковыми типами.

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

пом (Char).

* T1 является строковым типом, а T2 является упакованным

строковым типом.

* T1 и T2 являются совместимыми упакованными строковыми ти-

пами.

* T1 и T2 являются совместимыми множественными типами, и все

члены значения типа T2 попадают в диапазон возможных зна-

чений T1.

* T1 и T2 являются совместимыми типами указателей.

* T1 - это тип PChar, а T2 - это строковая константа (это

действует только при разрешении директивой {$X+} расширен-

ного синтаксиса).

* T1 является типом PChar, а T2 - символьным массивом с ну-

левой базой вида array[0..X] of Char (это действует только

при разрешении директивой {$X+} расширенного синтаксиса).

* T1 и T2 являются совместимыми процедурными типами.

* T1 представляет собой процедурный тип, а T2 - процедура

или функция с идентичным типом результата, идентичным чис-

лом параметров и соответствием между типами параметров.

* Объектный тип T2 совместим по присваиванию с объектным ти-

пом T1, если T2 является доменом T1.

* Тип указателя Р2, указывающий на объект типа Т3, совместим

по присваиванию с типом указателя P1, указывающим на объ-

ект T1, если T2 является доменом T1.

На этапе компиляции и выполнения выдается сообщение об ошиб-

ке, если совместимость по присваиванию необходима, а ни одно из

условий предыдущего списка не выполнено.

Раздел описания типов

Программы, процедуры и функции имеют для описания типов спе-

циальный раздел описания типов. Например:

type

TRange = integer;

TNumber = integer;

TColor = (red,green,blue);

TTextIndex = 1..100;

TTestValue = -99..99;

TTestList = array[TestIndex] of TestValue;

PestList = ^TTestList;

TDate = object

year: integer;

month: 1..12;

day: 1.. 31;

procedure SetDate(D, M, Y: Integer);

function ShowDate: String;

end;

MeasureData = record

when: Date;

count: TTestIndex;

data: TestListPtr;

end;

TMeasureList = array[1..50] of MeasureData;

TName = string[80];

TSex = (male,female);

TPersonDate = ^TPersonData;

TPersonData = record

name,firstName: TName;

age: integer;

married: boolean;

father,child,sibling: Person;

case s: Sex of

male: (bearded: boolean);

female: (pregnant: boolean);

end;

TPersonDate = array[0..SizeOf(TPersonDate)-1] of Byte;

TPeople = file of TPersonData;

В этом примере Range, Number и Integer являются тождествен-

ными типами. TTestIndex является просто совместимым и совместимым

по присваиванию, но не тождественным, с типами Number, Range и

Integer. Обратите внимание на использование в описаниях TCharVal

и TPersonBuf выражений-констант.

Соседние файлы в предмете Программирование на Pascal