Ada Programming/Function overloading - eMyTextBooks

Search:  

Free online books - just read it!

See live article   •   Ada Programming/Function overloading
 

Ada Programming/Function overloading


This Computer programming article is available in pseudocode and Ada.

Table of contents

Description

Function overloading (also polymorphism or method overloading) is a programming concept that allows programmers to define two or more functions with the same name.

Each function has a unique signature (or header), which is derived from:

  1. function/procedure name
  2. number of arguments
  3. arguments' type
  4. arguments' order
  5. arguments' name
  6. return type

Please note: Not all above signature options are available in all programming languages.

Available functions overloadings
Language 1 2 3 4 5 6
Ada yes yes yes yes yes yes
C++ yes yes yes yes no no
Java yes yes yes yes no no

Warning: Function overloading is often confused with function overriding. In Function overloading, a function with a different signature is created, adding to the pool of available functions. In function overriding, however, a function with the same signature is declared, replacing the old function in the context of the new function.

Demonstration

Since functions' names are in this case the same, we must preserve uniqueness of signatures, by changing something from the parameter list (last three alienees).

If the functions' signatures are sufficiently different, the compiler can distinguish which function was intended to be used at each occurence. This process of searching for the appropriate function is called function resolution and can be quite an intensive one, especially if there are a lot of equally named functions.

Programming languages supporting implicid type convertions usually use promotion of arguments (ie.: type casting of integer to floating-point) when there is no exact function match. The demotion of arguments is rarely used.

When two or more functions match the criteria in function resolution process, an ambiguity error is reported by compiler. Adding more information to compiler by editing the source code (using for example type casting), can address such doubts.

The example code shows how function overloading can be used. As functions do practically the same thing, it makes sense to use function overloading.

File: function_overloading.adb (view as markup (http://cvs.sourceforge.net/viewcvs.py/wikibook-ada/demos/Source/function_overloading.adb?only_with_tag=HEAD&view=markup), view as plain text (http://cvs.sourceforge.net/viewcvs.py/*checkout*/wikibook-ada/demos/Source/function_overloading.adb), download page (https://sourceforge.net/project/showfiles.php?group_id=124904))
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;

calling the first function

The first code block will generate numbers from 0 up to specified parameter MaxValue. The appropriate function call is:

 Number_1 : Integer := Generate_Number (10);

calling the second function

The second requires another parameter MinValue. Function will return numbers above or equals MinValue and lower than MaxValue.

 Number_2 : Integer := Generate_Number (6, 10);

Function overloading in Ada

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

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

Note that you can not 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 also

Wikibook

Ada 95 Reference Manual

Ada 2005 Reference Manual


Also helps finding: AdaProgrammingFunctionoverloading, AdaProgramming, ProgrammingFunction, Functionoverloading, sda, programing, funcion, adu, programmin, funtion, adas, progamming, funktion, adz, prgramming

   
 
  
Add to bookmarks
Related Articles
 
Computer programming/Function overloading:0
Computer programming/Function overloading
Ada Programming
Computer programming
Top Articles
 
Ada Programming/Keywords/and
Ada Programming/Keywords/begin
Ada Programming/Keywords/else
Ada Programming/Keywords/is
Ada Programming/Keywords/null
Ada Programming/Keywords/renames
Ada Programming/Keywords/return
Ada Programming/Keywords/subtype
Ada Programming/Keywords/then
Ada Programming/Keywords/type
Ada Programming/Keywords/use
Cookbook:Cup
Cookbook:Dessert
Cookbook:Egg
Cookbook:Tablespoon
Cookbook:Tomato
Programming:C
SA NCS:Business Studies
SA NCS:Computer Applications Technology
SA NCS:Engineering Graphics and Design
SA NCS:Life Sciences
Search LiveJournal blogs for Ada Programming/Function overloading
 

IKA Processing Equipment  •  Free Advertising  •  Post Office Credit Card  •  Property in Brazil •  Ford Cars

Copyright @ 2005 eMyTextBooks.com
This article is from Wikibooks. All text is available under the terms of the GNU Free Documentation License.