Справочное руководство по языку Ада-83


Производные типы - часть 3


Вызов производной подпрограммы эквивалентен вызову соответствующей подпрограммы родительского типа, в котором каждый фактический параметр производного типа заменяется преобразованием типа этого фактического параметра на родительский тип (это означает, что преобразование к родительскому типу происходит перед вызовом параметров вида

in и in out;

обратное преобразование к производному типу происходит после вызова параметров вида

in out и out,

см. 6.4.1). Дополнительно, если результат вызванной функции имеет родительский тип, то он преобразуется к производному типу.

Если производный или личный тип описан непосредственно в видимом разделе пакета, то в нем этот тип не должен использоваться как родительский тип в определении производного типа. (Для личных типов см. также разд. 7.4.1.)

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

Примеры:

type LOCAL-COORDINATE is new COORDINATE; —- Два различных типа type MIDWEEK is new DAY range TUE .. THU; —- CM. 3.5.1 type COUNTER is new POSITIVE; -- тот же диапазон, что и у POSITIVE type SPECIAL-KEY is new KEYMANAGER.KEY; — CM. 7.4.2 -- Производные подпрограммы имеют следующие спецификации:

--procedure GETKEY(K : out SPECIAL_KEY); -&#x2014;function "<"(X,Y : SPECIAL_KEY) return BOOLEAN;

Примечание.

Из правил наследования базовых операций и литералов перечисления следует, что обозначения для литерала или агрегата производного типа те же самые, что и для родительского типа; такие литералы и агрегаты называются

совмещенными.

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

Скрытие производной подпрограммы допустимо даже в одной и той же зоне описания (см. 8.3). Производная подпрограмма скрывает предопределенную операцию, имеющую тот же профиль типа параметров и результата (см. 6.6).




Начало  Назад  Вперед