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

Вызов переопределенной операции предка


Достаточно часто, реализация примитивной операции производного типа нуждается в вызове переопределенной примитивной операции предка.

Предположим, что для типов Root и Child_1

существуют описания операции Display имеющие следующий вид:

. . . procedure Display (Self: in Root); procedure Display (Self: in Child_1); . . .

Поскольку такие операции совмещены, то можно сказать, что реализация операции Display

типа Root (предка для типа Child_1) является "затененной", в виду переопределения реализации в производном типе Child_1.

В таком случае, для вызова "затененной" операции предка можно использовать следующее:

procedure Display (Self: in Child_1) is

begin

Display ( Root(Self) ); -- вызов "затененной" операции предка . . . end Display;

Здесь, для вызова "затененной" реализации операции предка, используется явное преобразование представления параметра Self

к типу Root.

За счет этого, в подобных случаях, всегда осуществляется статическое связывание, а также отсутствует опасность получения бесконечного рекурсивного вызова.



Содержание раздела