Annotated Ada Reference ManualLegal Information
Contents   Index   References   Search   Previous   Next 

6.6 Overloading of Operators

{operator} {user-defined operator} {operator (user-defined)} An operator is a function whose designator is an operator_symbol. [Operators, like other functions, may be overloaded.] 

Name Resolution Rules

Each use of a unary or binary operator is equivalent to a function_call with function_prefix being the corresponding operator_symbol, and with (respectively) one or two positional actual parameters being the operand(s) of the operator (in order). 
To be honest: We also use the term operator (in Section 4 and in 6.1) to refer to one of the syntactic categories defined in 4.5, “Operators and Expression Evaluation” whose names end with “_operator:” logical_operator, relational_operator, binary_adding_operator, unary_adding_operator, multiplying_operator, and highest_precedence_operator.

Legality Rules

The subprogram_specification of a unary or binary operator shall have one or two parameters, respectively. A generic function instantiation whose designator is an operator_symbol is only allowed if the specification of the generic function has the corresponding number of parameters.
Default_expressions are not allowed for the parameters of an operator (whether the operator is declared with an explicit subprogram_specification or by a generic_instantiation).
An explicit declaration of "/=" shall not have a result type of the predefined type Boolean. 

Static Semantics

A declaration of "=" whose result type is Boolean implicitly declares a declaration of "/=" that gives the complementary result. 
8  The operators "+" and "–" are both unary and binary operators, and hence may be overloaded with both one- and two-parameter functions. 


Examples of user-defined operators: 
function "+" (Left, Right : Matrix) return Matrix;
function "+" (Left, Right : Vector) return Vector;

--  assuming that A, B, and C are of the type Vector
--  the following two statements are equivalent:

A := B + C;
A := "+"(B, C);

Extensions to Ada 83

{extensions to Ada 83} Explicit declarations of "=" are now permitted for any combination of parameter and result types.
Explicit declarations of "/=" are now permitted, so long as the result type is not Boolean. 

Contents   Index   References   Search   Previous   Next 
Ada-Europe Sponsored by Ada-Europe