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



Надклассовые типы (wide class types) - часть 3


(напомним, что это все типы, производные от типа Root) будет совместим с формальным параметром Self. Например:

declare

Root_Instance : Root; Child_1_Instance : Child_1; Child_2_Instance : Child_2; GRand_Child_2_1_Instance : GRand_Child_2_1;

Instance : Root'Class := Child_1'(Root with null record);

begin

Show (Root_Instance); Show (Child_1_Instance); Show (Child_2_Instance); Show (GRand_Child_2_1_Instance); Show (Instance);

end;

Надклассовые типы могут быть использованы при описании ссылочных типов:

type Root_Ref is access Root'Class;

Как правило, описанные подобным образом типы называют типами надклассовых ссылок, а использование подобных типов в программе позволяет создавать переменные которые, во время выполнения программы, будут способны хранить значения с типами принадлежащими любому типу класса:

declare

Any_Instance: Root_Ref;

begin

Any_Instance := new Child_1'(Root with null record);

. . .

Any_Instance := new Child_2'(Root with null record); . . . end;

В показанном выше примере, переменная Any_Instance имеет тип надклассовой ссылки Root_Ref и может обозначать любой объект который принадлежит классу Root'Class.

Таким образом, как показано в примере, индивидуальным типом объекта обозначаемого переменной Any_Instance сначала будет тип Child_1, а затем - Child_2.




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