Last modified on 22 March 2013, at 15:02

Ada Programming/Function overloading


Ada Lovelace 1838.jpg

File: function_overloading.adb (view, plain text, download page, browse all)
function Generate_Number (MaxValue : Integer) return Integer is
   subtype Random_Type is Integer range 0 .. MaxValue;
   package Random_Pack is new Ada.Numerics.Discrete_Random (Random_Type);
 
   G : Random_Pack.Generator;
begin
   Random_Pack.Reset (G);
   return Random_Pack.Random (G);
end Generate_Number;


function Generate_Number (MinValue : Integer;
                          MaxValue : Integer) return Integer
is
   subtype Random_Type is Integer range MinValue .. MaxValue;
   package Random_Pack is new Ada.Numerics.Discrete_Random (Random_Type);
 
   G : Random_Pack.Generator;
begin
   Random_Pack.Reset (G);
   return Random_Pack.Random (G);
end Generate_Number;
 Number_1 : Integer := Generate_Number (10);
 Number_2 : Integer := Generate_Number (6, 10);

Function overloading in AdaEdit

Ada supports all six signature options but if you use the arguments' name as option you will always have to name the parameter when calling the function. i.e.:

Number_2 : Integer := Generate_Number (MinValue => 6,
                                       MaxValue => 10);

Note that you cannot overload a generic procedure or generic function within the same package. The following example will fail to compile:

 package myPackage
   generic
     type Value_Type is (<>);  
   -- The first declaration of a generic subprogram
   -- with the name "Generic_Subprogram"
   procedure Generic_Subprogram (Value : in out Value_Type);
   ...
   generic
     type Value_Type is (<>); 
   -- This subprogram has the same name, but no
   -- input or output parameters. A non-generic
   -- procedure would be overloaded here.
   -- Since this procedure is generic, overloading
   -- is not allowed and this package will not compile.
   procedure Generic_Subprogram;
   ...
   generic
     type Value_Type is (<>); 
   -- The same situation.
   -- Even though this is a function and not
   -- a procedure, generic overloading of
   -- the name "Generic_Subprogram" is not allowed.
   function Generic_Subprogram (Value : Value_Type) return Value_Type;
 end myPackage;

See alsoEdit

WikibookEdit

Ada 95 Reference ManualEdit

Ada 2005 Reference ManualEdit