Ада-95. Компилятор GNAT



Описание переменных и преобразование типов


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

Инициализация индивидуальных полей может быть выполнена отдельно или с помощью агрегатов. Например:

declare

Instance_1 : Object_1; Instance_2 : Object_2; Instance_3 : Object_3; begin

Instance_1.Field_1 := 1; Instance_2 := ( 1, 2 ); Instance_3 := ( Field_1 => 1, Field_2 => 2, Field_3 => 3 ); . . . end;

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

. . . Instance_1 := Object_1 (Instance_3); Instance_2 := Object_2 (Instance_3); . . .

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

Кроме того, допускается выполнение преобразования типов от предка к потомку (сверху-вниз).

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

В таких случаях используются расширяющие агрегаты, например:

. . . Instance_2 := (Instance_1 with 2); Instance_3 := (Instance_1 with Field_2 => 2, Field_3 => 3); . . .

Следует заметить, что клиентские программы не часто используют эти средства, поскольку тэговые типы, как правило, описываются как приватные типы.




Содержание  Назад  Вперед