140 likes | 275 Vues
This document reviews the concept of function overloading in C++, highlighting how to define multiple functions with the same name but different parameter types. It explains the process of handling various types such as int, double, and float, and details the calling mechanics that allow seamless integration of different data types without unnecessary type conversion. Additionally, it discusses the implications of changing data types in a program, advocating for the advantages of function overloading to maintain code flexibility and readability.
E N D
Computer Science 1620 Function Overloading
Review Question: • suppose I have the following function: • can I call this function with an integer? • yes – compiler will promote integer to double • same thing applies to demotion • double square(double x) { • return x * x; • } • int main() { • cout << square(3) << endl;
Function Overloading • Suppose you are in charge of writing a maximum function • The program must work with three different types: • int • double • float
Function Overloading • First Way: double maximum(double n1, double n2) { if (n1 > n2) return n1; else return n2; }
Function Overloading • The previous example works fine, but inefficient • consider following call int x, y; cin >> x >> y; int z = maximum(x,y); • consider what happens when compiling the program • the values x and y must be converted to type double in order to use the function • the return value is of type double … which must be converted back to an integer (which generates a compiler warning)
Function Overloading • Second Try: int maximum(int n1, int n2) { if (n1 > n2) return n1; else return n2; }
Function Overloading • The previous example works fine for integers, but what about doubles? • consider following call double x, y; cin >> x >> y; double z = maximum(x,y); cout << z << endl; • suppose I run this program, and type in the values 4.6 and 7.4 • what will the output be?
Function Overloading • Second try: double maximumDouble(double n1, double n2) { if (n1 > n2) return n1; else return n2; } float maximumFloat(float n1, float n2) { if (n1 > n2) return n1; else return n2; } int maximumInt(int n1, int n2) { if (n1 > n2) return n1; else return n2; }
Function Overloading • We can now change our original call int x, y; cin >> x >> y; int z = maximumInt(x,y); • no conversions take place • some problems though • what if a programmer writes a program using integers … and the supervisor decides to use doubles instead • not only are you changing your variable types but now you have to change all of your calls to maximum
Function Overloading • Solution: Function overloading • C++ allows you to use the same function name for different functions • the functions must have different parameter lists • the function being called will depend on the arguments being sent
Function Overloading • Last try: double maximum(double n1, double n2) { if (n1 > n2) return n1; else return n2; } float maximum(float n1, float n2) { if (n1 > n2) return n1; else return n2; } int maximum(int n1, int n2) { if (n1 > n2) return n1; else return n2; }
Function Overloading • Now when we make the following call: int x, y; cin >> x >> y; int z = maximum(x,y); • no conversions take place • if we wanted to change to doubles, we need only change the variable type double x, y; cin >> x >> y; double z = maximum(x,y);
Function Overloading • Resolving overloaded definitions • the compiler must be able to choose between two function declarations • always chooses the best match • overload resolution is a complex task • beyond scope of class • suffices to know that it tries for closest match