Function overloading: more than one function with the same name
May have:
Not allowed:
Compiler determines from the function prototypes which instance of the function is being called.
int abs(int value); double abs(double value);
int abs(int value) { if (value < 0) return -1 * value; else return value; } double abs(double value) { if (value < 0) return -1 * value; else return value; }
int main() { int iValue = -4; double dValue = 0.56; cout << abs(iValue) << endl; cout << abs(dValue) << endl; cout << abs(-123) << endl; cout << abs(-6.2) << endl; }
This pair of prototypes would be allowed:
double abs(int value); double abs(double value);
This pair of prototypes would not be allowed:
int abs(int value); double abs(int value);
Values of type int are automatically converted to double if there are no function prototypes which match the int type. For instance:
double abs(double value); int main { int iValue; cout << abs(iValue) << endl; cout << abs(5) << endl; }
int perimeter(int sideLength); // For computing the perimeter of a square int perimeter(int height, int width); // For computing the perimeter of a rectangle int main() { cout << perimeter(5) << endl; cout << perimeter(4, 6) << endl; } int perimeter(int sideLength) { return 4 * sideLength; } int perimeter(int height, int length) { return 2 * height + 2 * length; }
int perimeter(int sideLength); // For computing the perimeter of a square int perimeter(int height, int width); // For computing the perimeter of a rectangle int main() { cout << perimeter(5) << endl; cout << perimeter(4, 6) << endl; } int perimeter(int sideLength) { return perimeter(sideLength, sideLength); } int perimeter(int height, int length) { return 2 * height + 2 * length; }
Implement the following four functions to display a box of given size and either blank or filled with a given character. Some sample outputs are shown. Hint: you'll need nested for loops.
void displayBox(int length); // An empty square of given size. void displayBox(int length, char fillChar); // A square filled with the given character. void displayBox(int width, int height); // An empty rectangle of given size. void displayBox(int width, int height, char fillChar); // A rectangle filled with the given character. displayBox(2) displayBox(2, 'k') displayBox(4, 2, '*') ---- ---- ------ | | |kk| |****| | | |kk| |****| ---- ---- ------
void swap(int x, int y) { int temp; temp = x; x = y; y = temp; } int main() { int first = 5, second = 8; cout << first << ", " << second << endl; swap(first, second); cout << first << ", " << second << endl; }
What will the output be?
void swap(int& x, int& y) { int temp; temp = x; x = y; y = temp; } int main() { int first = 5, second = 8; cout << first << ", " << second << endl; swap(first, second); cout << first << ", " << second << endl; // The next line would cause a compiler error. Why? swap(first + 6, 42); }
Now what will the output be?
Note that you could overload the swap function to swap values of different types (double, char, ...).
For larger-sized data (like structs, arrays, and classes), it's more efficient to use call-by-reference, even if the function doesn't change the value within its body. You can use a constant reference parameter to indicate and insure that your function doesn't change the value.
int DoSomething(const double& bigData) { int calculatedValue; // do some calculation involving bigData // The following line should generate a compiler error. Why? bigdata = 12345.6789; return calculatedValue; }
What is the output of the following program (which is Ch. 4, Self-Test #4, in my book) ?
void figure_me_out(int& x, int y, int& z); int main() { int a = 10, b = 20, c = 30; figure_me_out(a, b, c); cout << a << " " << b << " " << c << endl; return 0; } void figure_me_out(int& x, int y, int& z) { cout << x << " " << y << " " << z << endl; x = 1; y = 2; z = 3; cout << x << " " << y << " " << z << endl; }
void feetAndInches(int totalInches, int& feet, int& inches) { inches = totalInches % 12; feet = (totalInches - inches) / 12; return; } int main() { int total, ft, in; cout << "Enter total number of inches: "; cin >> total; // Notice that we don't initialize ft or in !! feetAndInches(total, ft, in); cout << total << "\" = " << ft << "\', " << in << "\"" << endl; }
This is programming project 3 of Ch. 4 (in my book). Write the following function and use it to write a program that calculates what coins to give for an amount of change between 1 and 99 cents. For instance, 86 cents = 3 quarters + 1 dime + 1 penny, 43 cents = 1 quarter + 1 dime + 1 nickel + 3 pennies.
void compute_coin(int coin_value, int& number, int& amount_left); // Precondition: 0 < coin_value < 100, 0 <= amount_left < 100 // Postcondition: number is set to the maximum number of coins of // denomination coin_value cents that can be obtained from amount_left // cents. amount_left has been decreased by the value of the coins.