Ада-95. Компилятор GNAT

       

Совмещение знаков операций (operator overloading)


В языках подобных Паскалю знак операции "+" - совмещен.

Действительно, он может использоваться для сложения целых и вещественных чисел, и даже строк.

Таким образом, очевидно что этот знак операции используется для представления кода который выполняет абсолютно разные действия.

Ада разрешает программистам выполнять совмещение предопределенных знаков операций с их собственным кодом.

Следует заметить, в Аде, действие выполняемое знаком операции, реализуется путем вызова функции именем которой является знак операции заключенный в двойные кавычки.

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

В некоторых случаях, проблему двусмысленности знака операции можно преодолеть непосредственно специфицируя имя пакета (рассматривается далее).

Кроме того, к функциям которые реализуют действия знаков операций предъявляется дополнительное требование: они не могут быть выделены в самостоятельно компилируемые модули, а должны содержаться в другом модуле, таком как процедура, функция или пакет.

Рассмотрим простой пример в котором мы хотим предусмотреть возможность сложения двух векторов:

procedure Add_Demo is

type Vector is array (Positive range <>) of Integer; A : Vector(1..5); B : Vector(1..5); C : Vector(1..5);

function "+"(Left, Right : Vector) return Vector is

Result : Vector(Left'First..Left'Last); Offset : constant Natural := Right'First - 1;

begin

if Left'Length /= Right'Length then

raise Program_Error; -- исключение, -- рассматриваются позже end if;

for I in Left'Range loop

Result(I) := Left(I) + Right(I - Offset); end loop; return Result; end "+";

begin

A := (1, 2, 3, 4, 5); B := (1, 2, 3, 4, 5); C := A + B; end Add_Demo;

В этом примере хорошо продемонстрированы многие ранее рассмотренные средства которые характерны для языка программирования Ада.



Содержание раздела