will match both a formal argument of a pointer type and a formal argument of a

Will match both a formal argument of a pointer type

This preview shows page 18 - 23 out of 25 pages.

will match both a formal argument of a pointer type and a formal argument of a numeric type a pointer of any type will match a formal argument of void* Note: All standard conversions are treated equally, there is no precedence. If more than one match is found by standard conversion, a compiler error occurs! Ambiguity can also be resolved by an explicit cast. //Example promotion and standard conversion #include <iostream> using namespace std; void ff ( int x) {cout< <"int= "<<x<< end l;} int mai n() { ff (2L); ff (0); ff (3.14); ff ('a'); ff ( tru e); return 0; }
Image of page 18
11/29/17 19 //Example promotion and standard conversion #include <iostream> using namespace std; void ff ( int x) {cout< <"int= "<<x<< end l;} int mai n() { ff (2L); //standard conversion ff (0); //exact match ff (3.14); //standard conversion ff ('a'); //promotion ff ( tru e); //standard conversion return 0; } Output int=2 int=0 int=3 int=97 int=1 Multiple Argument Calls Matching rules are applied to each argument in turn . If no exact match is found, the function chosen is the one for which the resolution of each argument is the same or better than for all other functions in the overloaded set, and is strictly better than all other functions for at least one argument. NOTE: 1. A call is ambiguous if no one function instance contains a better match. example: min(long, long); min(double, double); min(int x, int y); //ambiguous, no best match 2. If more than one function contains a better match, then the call is also ambiguous example: foo(int, int); foo(double, double); foo('a', 3.14F); //ambiguous, no best match Both instances of foo() contain a best match through promotion.
Image of page 19
11/29/17 20 Default arguments and overloading Overloaded functions can have default arguments. An overloaded function instance with default arguments will match a call that provides all or some subset of its arguments. void ff(int); void ff(long, int=0); ff(0,0); //matches ff(long, int) ff(0); //matches ff(int)? No ambiguous ff(3.14); //error ambiguous; because both need a //standard conversion #include <iostream> using namespace std ; //prototype void test( int = 2 , int = 4 , int = 6 ); int main() { test (); test ( 6 ); test ( 3 , 9 ); test ( 1 , 5 , 7 ); return 0 ; } //function definition void test( int a, int b, int c) { cout << a << b << c << endl ; } What is the output? 246 646 396 157
Image of page 20
11/29/17 21 #include <iostream> #include <string> using namespace std ; int main( void ) { int a = 0 , b = 0 ; string s = " Hello " ; print ( a ); print ( b , 3 ); print ( ' A ' ); print ( 5 ); print ( s ); print ( 1.44 ); print ( ' a ' , ' b ' ); print (( double )a); return 0 ; } //function definition void print( int x ) { cout << "blue\n" ; } void print( int x, int y) { cout << "purple\n" ; } void print( string s ) { cout << "pink\n" ; } void print( char x ) { cout << "red\n" ; } void print( double x ) { cout << "green\n" ; } //function prototype void print( int x ); void print( int x, int y); void print( string s ); void print( char x ); void print( double x ); What is the output? blue purple red blue pink green purple green Recursion • A recursive function is a function that calls itself either directly or indirectly through another function.
Image of page 21
11/29/17 22 Recursive Definitions Definition: The process of solving a problem by reducing it to smaller versions of itself is called recursion.
Image of page 22
Image of page 23

You've reached the end of your free preview.

Want to read all 25 pages?

  • Fall '15
  • Marinolent

  • Left Quote Icon

    Student Picture

  • Left Quote Icon

    Student Picture

  • Left Quote Icon

    Student Picture