8.3.1 Overriding Indicators
An
overriding_indicator
is used to declare that an operation is intended to override (or not
override) an inherited operation.
Syntax
overriding_indicator ::= [
not]
overriding
Legality Rules
the operation shall be a primitive operation for
some type;
if the
overriding_indicator
is
overriding, then the operation shall override a homograph at
the place of the declaration or body;
if the
overriding_indicator
is
not overriding, then the operation shall not override any homograph
(at any place).
In addition to the places where
Legality Rules normally apply, these rules also apply in the private
part of an instance of a generic unit.
Examples
The use of
overriding_indicators
allows the detection of errors at compile-time that otherwise might not
be detected at all. For instance, we might declare a security queue derived
from the Queue interface of 3.9.4 as:
type Security_Queue is new Queue with record ...;
overriding
procedure Append(Q : in out Security_Queue; Person : in Person_Name);
overriding
procedure Remove_First(Q : in out Security_Queue; Person : in Person_Name);
overriding
function Cur_Count(Q : in Security_Queue) return Natural;
overriding
function Max_Count(Q : in Security_Queue) return Natural;
not overriding
procedure Arrest(Q : in out Security_Queue; Person : in Person_Name);
The first four subprogram declarations guarantee
that these subprograms will override the four subprograms inherited from
the Queue interface. A misspelling in one of these subprograms will be
detected by the implementation. Conversely, the declaration of Arrest
guarantees that this is a new operation.