![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Приведенные операторы присваивания при обращении к записям можно записать компактно, если использовать оператор присоединения, имеющий вид:
WITH <список перем_записей, полей> DO <оператор>.
Имена переменных-записей и полей, указанные в заголовке оператора присоединения, можно опускать при обращении к компонентам записей в области действия оператора WITH:
Пример: Обращение: with сотф do Оклад:=1344;
или
with сотф do begin
Оклад:=1344;
Адрес.Ндом:=12;
Адрес.Нкв:=34;
end;
При определении того или иного комбинированного типа имена отдельных полей могут совпадать с именами переменных. Путаницы при использовании этих переменных и соответствующих полей записи не происходит в силу того, что в частичной переменной-записи указывается и имя собственной переменной-записи. Однако при использовании оператора присоединения может возникнуть недоразумение, связанное с тем, что внутри него имена переменных-записей опускаются. Возникает вопрос: что обозначает имя внутри оператора присоединения, если и у соответствующей переменной-записи присутствует поле с таким именем, и в разделе переменных введена в употребление переменная с таким же именем? В языке Паскаль этот конфликт решается так: предпочтение отдаётся именам полей записи, т.е. считается, что внутри оператора присоединения соответствующий идентификатор обозначает имя поля, а не имя переменной.
Пусть, например, в разделах описания типов и описания переменных введены в употребление следующие комбинированные типы и переменные:
Type студ=record
Фам,Имя,Отч:array [1..16] of char;
Пол: (муж,жен);
Группа:101..520;
Стип:boolean;
End;
сотр=record
Фам,Имя,Отч:array [1..16] of char;
Пол: муж..жен;
Должность:(мнс,нс,снс,асс,доц,проф);
Зарплата:integer;
End;
Var X:Студ;
Y:Сотр;
Тогда в следующем фрагменте программы, использующем оператор присоединения:
With X,Y do begin
Пол:=муж;
Имя:=’Александр’;
Стипендия:=true;
Группа:=108;
End;
Поля Пол и Имя относятся к переменной Y типа Сотр, так как эта переменная в списке переменных-записей заголовка оператора присоединения фигурирует после переменной X типа Студ, имеющей одноимённые поля Пол и Имя. Кроме того, в этом фрагменте имя Степендия в теле оператора присоединения трактуется как имя поля переменной X, а вне его как имя переменной целого типа.
Приведём ещё один пример, иллюстрирующий трактовку оператора присоединения. Пусть имеются описания переменных:
Var R1:record A,B,C:integer; end;
R2:record A,D:integer;
B:record C,E:integer;end;
end;
Тогда оператор присоединения
With R1,B,R2 do
Begin A:=1; B:=2; C:=3; D:=4; E:=5; end;
эквивалентен составному оператору
begin R1.A:=1; R1.B:=2; R1.C:=3; R2.D:=4; R2.B.E:=5; end;
Рекомендуется внимательно проанализировать каждый оператор присваивания и чётко понять, почему именно такие частичные переменные фигурируют в составном операторе, эквивалентном оператору присоединения.
Дата публикования: 2015-02-22; Прочитано: 320 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!