Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikibooksThe Free Textbook Project
Search

Ada Programming/Function overloading

From Wikibooks, open books for an open world
<Ada Programming
Computing »Computer Science »Computer Programming »Ada Programming

Ada. Time-tested, safe and secure.
Ada. Time-tested, safe and secure.

Description

[edit |edit source]

Function overloading (alsomethod overloading) is a programming concept that allows programmers to define two or more functions with the same name and in the same scope.

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
Language123456
Adayesyesyesyesyesyes
C++yesyesyesyesnono
Javayesyesyesyesnono
Swiftyesyesyesyesyesyes

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

[edit |edit source]

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

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

Programming languages supporting implicit type conventions usually use promotion of arguments (i.e. 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, anambiguity error is reported by compiler. Adding more information for the 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,plain text,download page,browse all)
function Generate_Number (MaxValue : Integer)return Integerissubtype Random_Typeis Integerrange 0 .. MaxValue;package Random_PackisnewAda.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 Integerissubtype Random_Typeis Integerrange MinValue .. MaxValue;package Random_PackisnewAda.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

[edit |edit source]

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

 Number_1 : Integer := Generate_Number (10);

calling the second function

[edit |edit source]

The second requires another parameterMinValue. Function will return numbers above or equalsMinValue and lower thanMaxValue.

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

Function overloading in Ada

[edit |edit source]

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 myPackagegenerictype Value_Typeis (<>);-- The first declaration of a generic subprogram-- with the name "Generic_Subprogram"procedure Generic_Subprogram (Value :inout Value_Type);   ...generictype Value_Typeis (<>);-- 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;   ...generictype Value_Typeis (<>);-- 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

[edit |edit source]

Wikibook

[edit |edit source]

Ada 95 Reference Manual

[edit |edit source]

Ada 2005 Reference Manual

[edit |edit source]
Retrieved from "https://en.wikibooks.org/w/index.php?title=Ada_Programming/Function_overloading&oldid=4047427"
Category:

[8]ページ先頭

©2009-2025 Movatter.jp