8.3.1 Overriding Indicators
1/2
An
overriding_indicator
is used to declare that an operation is intended to override (or not
override) an inherited operation.
Syntax
2/2
overriding_indicator ::= [
not]
overriding
Legality Rules
3/2
4/2
- the operation shall be a primitive
operation for some type;
5/2
- if the overriding_indicator
is overriding, then the operation shall override a homograph at
the place of the declaration or body;
6/2
- if the overriding_indicator
is not overriding, then the operation shall not override any homograph
(at any place).
7/2
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.
8/2
Examples
9/2
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:
10/2
type Security_Queue is new Queue with record ...;
11/2
overriding
procedure Append(Q : in out Security_Queue; Person : in Person_Name);
12/2
overriding
procedure Remove_First(Q : in out Security_Queue; Person : in Person_Name);
13/2
overriding
function Cur_Count(Q : in Security_Queue) return Natural;
14/2
overriding
function Max_Count(Q : in Security_Queue) return Natural;
15/2
not overriding
procedure Arrest(Q : in out Security_Queue; Person : in Person_Name);
16/2
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.