Справочник по Ada 2012
8.3.1 Индикаторы переопределения
Индикатор overriding_indicator используется для объявления того, что операция предназначена для переопределения (или не переопределения) унаследованной операции.
Синтаксис
overriding_indicator ::= [не] переопределяя
Правила допустимости
Если объявление abstract_subprogram_declaration, null_procedure_declaration, expression_function_declaration, subprogram_body, subprogram_body_stub, subprogram_renaming_declaration, generic_instantiation подпрограммы или subprogram_declaration (кроме защищенной подпрограммы) содержит overriding_indicator, то:
- операция должна быть примитивной операцией для некоторого типа;
- если overriding_indicator равен переопределяя, то операция должна переопределять гомограф в месте объявления или тела;
- если overriding_indicator равен не переопределяя, то операция не должна переопределять какой-либо гомограф (в любом месте).
Помимо мест, где обычно применяются правила допустимости, эти правила также применяются в частях с закрытым доступом экземпляра обобщенного модуля.
ПРИМЕЧАНИЯ
8 Правила для overriding_indicatorов заданий и защищенных записей и защищенных подпрограмм см. в 9.5.2 и 9.4 соответственно.
Примеры
Использование overriding_indicatorов позволяет обнаруживать ошибки на этапе компиляции, которые в противном случае могут вообще не быть обнаружены. Например, мы можем объявить очередь безопасности, производную от интерфейса Queue из 3.9.4, как:
тип Security_Queue является новым Queue с записями ...;
переопределяя
процедура Append(Q : вход вых Security_Queue; Person : вход Person_Name);
процедура Append(Q : вход вых Security_Queue; Person : вход Person_Name);
переопределяя
процедура Remove_First(Q : вход вых Security_Queue; Person : вход Person_Name);
процедура Remove_First(Q : вход вых Security_Queue; Person : вход Person_Name);
переопределяя
функция Cur_Count(Q : вход Security_Queue) возвращает Natural;
функция Cur_Count(Q : вход Security_Queue) возвращает Natural;
переопределяя
функция Max_Count(Q : вход Security_Queue) возвращает Natural;
функция Max_Count(Q : вход Security_Queue) возвращает Natural;
не переопределяя
процедура Arrest(Q : вход вых Security_Queue; Person : вход Person_Name);
процедура Arrest(Q : вход вых Security_Queue; Person : вход Person_Name);
Четыре первых объявления подпрограмм гарантируют, что эти подпрограммы переопределят четыре подпрограммы, унаследованные от интерфейса Queue. Опечатка в одной из этих подпрограмм будет обнаружена реализацией. Напротив, объявление Arrest гарантирует, что это новая операция.