ВУЗ:
Составители:
Рубрика:
39
2.2.2. Семантика присваивания
Рассмотрим присваивание: x = e.
Чтобы присваивание было допустимым, типы переменной x и выражения
e должны быть согласованными. Пусть сущность x согласно объявлению
принадлежит классу T. Будем говорить, что тип T основан на классе T и
является базовым типом x, так что базовый тип определяется классом
объявления. Пусть теперь в рассматриваемом нами присваивании выражение e
связано с объектом типа T1. Тип T1 согласован по присваиванию с базовым
типом T переменной x, если класс T1 является потомком класса T. Присваивание
допустимо, если и только если имеет место согласование типов.
Например, пусть задан некоторый класс Parent, а класс Child – его
потомок, объявленный следующим образом:
class Child : Parent {...}
Пусть теперь в некотором классе объявлены переменные этих классов и
созданы связанные с ними объекты:
Parent p1 = new Parent(), p2 = new Parent();
Child ch1 = new Child(), ch2 = new Child();
Тогда допустимы присваивания:
p1 = p2; p2 = p1; ch1 = ch2; ch2 = ch1; p1 = ch1; p1 = ch2;
Но недопустимы присваивания:
ch1 = p1; ch2 = p1; ch2 = p2;
Отметим, что потомок может вернуть себе переданный родителю объект,
задав явное преобразование. Так что следующие присваивания допустимы:
p1 = ch1; ... ch1 = (Child)p1;
Семантика присваивания справедлива и для другого важного случая –
при рассмотрении соответствия между формальными и фактическими
аргументами процедур и функций. Если формальный аргумент согласно
объявлению имеет тип T, а выражение, задающее фактический аргумент, имеет
тип T1, то имеет место согласование типов формального и фактического
аргумента, если и только если класс T1 является потомком класса T. Отсюда
незамедлительно следует, что если формальный параметр процедуры
принадлежит классу Object, то фактический аргумент может быть выражением
любого типа.
2.2.3. Преобразование к типу object
Рассмотрим частный случай присваивания x = e; когда x имеет тип object.
В этом случае гарантируется полная согласованность по присваиванию –
выражение e может иметь любой тип. В результате присваивания значением
переменной x становится ссылка на объект, заданный выражением e. Отметим,
текущим типом x становится тип объекта, заданного выражением e. Уже здесь
проявляется одно из важных различий между классом и типом. Переменная,
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »
