Module 8
Module 8
Intructors: Abir
Das and
Sourangshu
Bhattacharya
Module 08: Programming C++
Objectives & Default Parameters & Function Overloading
Outline
Default
Parameter
Highlights
Function
Intructors: Abir Das and Sourangshu Bhattacharya
Overloading
Overload
Resolution Department of Computer Science and Engineering
Promotion &
Indian Institute of Technology, Kharagpur
Conversion
{abir, sourangshu}@cse.iitkgp.ac.in
Default
Parameters in
Overloading
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 1
Module Objectives
Module 08
Default
Parameter
Highlights
Function
Overloading
Overload
Resolution
Promotion &
Conversion
Default
Parameters in
Overloading
Summary
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 2
Module Outline
Module 08
Default ◦ Meaning
Parameters in
Overloading ◦ Overloading function
Summary • Overload Resolution
• Default parameters and Function Overloading
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 3
Motivation: Example CreateWindow in MSDN
Declaration of CreateWindow Calling CreateWindow
Module 08
Module 08
Intructors: Abir
#include <iostream>
Das and using namespace std;
Sourangshu
Bhattacharya
int IdentityFunction(int a = 10) { // Default value for parameter a
Objectives & return (a);
Outline
}
Default
Parameter
Highlights int main() {
Function int x = 5, y;
Overloading
Module 08
Intructors: Abir • C++ allows programmer to assign default values to the function parameters
Das and
Sourangshu
Bhattacharya
• Default values are specified while prototyping the function
Objectives &
• Default parameters are required while calling functions with fewer arguments or without
Outline any argument
Default
Parameter • Better to use default value for less used parameters
Highlights
Function
Overloading
Overload
Resolution
Promotion &
Conversion
Default
Parameters in
Overloading
Summary
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 7
Restrictions on default parameters
Module 08
• All parameters to the right of a parameter with default argument must have default
Intructors: Abir
Das and
arguments (function f violates)
Sourangshu
Bhattacharya
• Default arguments cannot be re-defined (second signature of function g violates)
• All non-defaulted parameters needed in a call (first call of g() violates)
Objectives & #include <iostream>
Outline
Module 08 • Default parameters to be supplied only in a header file and not in the definition of a
Intructors: Abir
function
Das and
Sourangshu // Header file: myFunc.h
Bhattacharya
void g(int, double, char = ’a’); // Defaults ch
Objectives &
void g(int i, double f = 0.0, char ch); // A new overload. Defaults f & ch
Outline void g(int i = 0, double f, char ch); // A new overload. Defaults i, f & ch
// void g(int i = 0, double f = 0.0, char ch = ’a’); // Alternate signature. Defaults all in one go
Default
Parameter ----------------------------------------------------
Highlights // Source File
#include <iostream>
Function
Overloading using namespace std;
#include "myFunc.h" // Defaults taken from header
Overload
Resolution
void g(int i, double d, char c) { cout << i << ’ ’ << d << ’ ’ << c << endl; } // No defaults here
Promotion &
----------------------------------------------------
Conversion // Application File
Default
#include <iostream>
Parameters in #include "myFunc.h"
Overloading int main() { int i = 5; double d = 1.2; char c = ’b’;
Summary g(); // Prints: 0 0 a
g(i); // Prints: 5 0 a
g(i, d); // Prints: 5 1.2 a
g(i, d, c); // Prints: 5 1.2 b
}
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 9
Function overloads: Matrix Multiplication in C
Module 08
• Similar functions with different data types and algorithms
Intructors: Abir typedef struct { int data[10][10]; } Mat; // 2D Matrix
Das and typedef struct { int data[1][10]; } VecRow; // Row Vector
Sourangshu
Bhattacharya typedef struct { int data[10][1]; } VecCol; // Column Vector
Module 08
• Functions having the same name, similar functionality but different algorithms, and identified
Intructors: Abir
Das and
by different interfaces data types
Sourangshu typedef struct { int data[10][10]; } Mat; // 2D Matrix
Bhattacharya typedef struct { int data[1][10]; } VecRow; // Row Vector
typedef struct { int data[10][1]; } VecCol; // Column Vector
Objectives &
Outline
void Multiply(const Mat& a, const Mat& b, Mat& c); // c = a * b
Default void Multiply(const Mat& a, const VecCol& b, VecCol& c); // c = a * b
Parameter
void Multiply(const VecRow& a, const Mat& b, VecRow& c); // c = a * b
Highlights
void Multiply(const VecCol& a, const VecRow& b, Mat& c); // c = a * b
Function void Multiply(const VecRow& a, const VecCol& b, int& c); // c = a * b
Overloading
Module 08
• Define multiple functions having the same name
Intructors: Abir
Das and
• Binding happens at compile time
Sourangshu Same # of Parameters Different # of Parameters
Bhattacharya
Summary
int sum = 11 double sum = 7.75 Area of Rectangle = 12 Area of Square = 25
• Same Add function to add two ints or two doubles • Same Area function for rectangles and for squares
• Same # of parameters but different types • Different number of parameters
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 12
Program 08.05: Restrictions in Function Overloading
Module 08 • Two functions having the same signature but different return types cannot be overloaded
Intructors: Abir #include <iostream>
Das and using namespace std;
Sourangshu
Bhattacharya
int Area(int a, int b) { return (a * b); }
Objectives & double Area(int a, int b) { return (a * b); }
Outline // Error C2556: double Area(int,int): overloaded function differs only by return type
Default
// from int Area(int,int)
Parameter // Error C2371: Area: redefinition; different basic types
Highlights
Function
int main() {
Overloading int x = 10, y = 12, z = 5, t;
double f;
Overload
Resolution
Promotion & t = Area(x, y);
Conversion // Error C2568: =: unable to resolve function overload
Default // Error C3861: Area: identifier not found
Parameters in
Overloading
cout << "Multiplication = " << t << endl;
Summary
f = Area(y, z); // Errors C2568 and C3861 as above
cout << "Multiplication = " << f << endl;
}
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 13
Function Overloading – Summary of Rules
Module 08
Overload
▷ User defined type conversion
Resolution
Promotion &
Conversion
Default
Parameters in
Overloading
Summary
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 15
Overload Resolution: Exact Match
Module 08
Summary
◦ Converting reference (only) to volatile reference
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 16
Overload Resolution: Promotion & Conversion
Module 08
Overload
▷ char to int; float to double
Resolution ▷ enum to int / short / unsigned int / ...
Promotion &
Conversion ▷ bool to int
Default
Parameters in
Overloading
Summary
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 17
Overload Resolution: Promotion & Conversion
Module 08
Summary
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 18
Example: Overload Resolution with one parameter
Module 08
Intructors: Abir
• In the context of a list of function prototypes:
Das and int g(double); // F1
Sourangshu
Bhattacharya void f(); // F2
void f(int); // F3
Objectives & double h(void); // F4
Outline int g(char, int); // F5
Default
void f(double, double = 3.4); // F6
Parameter void h(int, double); // F7
Highlights void f(char, char *); // F8
Function The call site to resolve is:
Overloading
f(5.6);
Overload
Resolution • Resolution:
Promotion &
Conversion ◦ Candidate functions (by name): F2, F3, F6, F8
Default ◦ Viable functions (by # of parameters): F3, F6
Parameters in
Overloading
◦ Best viable function (by type double – Exact Match): F6
Summary
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 19
Example: Overload Resolution fails
Module 08
• Consider the overloaded function signatures:
Intructors: Abir
Das and int fun(float a) {...} // Function 1
Sourangshu
Bhattacharya int fun(float a, int b) {...} // Function 2
int fun(float x, int y = 5) {...} // Function 3
Objectives &
Outline
int main() {
Default
Parameter
float p = 4.5, t = 10.5;
Highlights int s = 30;
Function
Overloading fun(p, s); // CALL - 1
Overload fun(t); // CALL - 2
Resolution
return 0;
Promotion &
Conversion }
Default
Parameters in • CALL - 1: Matches Function 2 & Function 3
Overloading
• CALL - 2: Matches Function 1 & Function 3
Summary
• Results in ambiguity for both calls
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 20
Program 08.06/07:
Default Parameter & Function Overload
Module 08
• Compilers deal with default parameters as a special case of function overloading
Intructors: Abir
Das and
• These need to be mixed carefully
Sourangshu
Bhattacharya
Default Parameters Function Overload
Objectives &
Outline
#include <iostream> #include <iostream>
using namespace std; using namespace std;
Default int f(int a = 1, int b = 2); int f();
Parameter
Highlights
int f(int);
int f(int, int);
Function
Overloading
int main() { int main() {
Overload int x = 5, y = 6; int x = 5, y = 6;
Resolution
Promotion &
Conversion f(); // a = 1, b = 2 f(); // int f();
f(x); // a = x = 5, b = 2 f(x); // int f(int);
Default
Parameters in f(x, y); // a = x = 5, b = y = 6 f(x, y); // int f(int, int);
Overloading } }
Summary
• f can have 3 possible forms of call • f can have 3 possible forms of call
• No overload here use default parameters.
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 21
Program 08.08:
Default Parameter & Function Overload
Module 08 • Function overloading can use default parameter
Intructors: Abir • However, with default parameters, the overloaded functions should still be resolvable
Das and
Sourangshu #include <iostream>
Bhattacharya using namespace std;
// Overloaded Area functions
Objectives & int Area(int a, int b = 10) { return (a * b); }
Outline
double Area(double c, double d) { return (c * d); }
Default int main() { int x = 10, y = 12, t; double z = 20.5, u = 5.0, f;
Parameter t = Area(x); // Binds int Area(int, int = 10)
Highlights
cout << "Area = " << t << endl; // Area = 100
Function
Overloading t = Area(x, y); // Binds int Area(int, int = 10)
Overload cout << "Area = " << t << endl; // Area = 120
Resolution
Promotion & f = Area(z, u); // Binds double Area(double, double)
Conversion
cout << "Area = " << f << endl; // Area = 102.5
Default
Parameters in
Overloading f = Area(z); // Binds int Area(int, int = 10)
cout << "Area = " << f << endl; // Area = 200
Summary
// Un-resolvable between int Area(int a, int b = 10) and double Area(double c, double d)
f = Area(z, y); // Error: call of overloaded Area(double&, int&) is ambiguous
}
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 22
Program 08.09:
Default Parameter & Function Overload
Module 08
• Function overloading with default parameters may fail
Intructors: Abir
Das and
Sourangshu #include <iostream>
Bhattacharya using namespace std;
int f();
Objectives & int f(int = 0);
Outline int f(int, int);
Default
Parameter int main() {
Highlights int x = 5, y = 6;
Function
Overloading f(); // Error C2668: f: ambiguous call to overloaded function
Overload // More than one instance of overloaded function f
Resolution // matches the argument list:
Promotion & // function f()
Conversion
// function f(int = 0)
Default
Parameters in
Overloading
f(x); // int f(int);
f(x, y); // int f(int, int);
Summary
return 0;
}
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 23
Module Summary
Module 08
Intructors: Abir • Introduced the notion of Default parameters and discussed several examples
Das and
Sourangshu
Bhattacharya
• Identified the necessity of function overloading
Objectives &
• Introduced static Polymorphism and discussed examples and restrictions
Outline
• Discussed an outline for Overload resolution
Default
Parameter • Discussed the mix of default Parameters and function overloading
Highlights
Function
Overloading
Overload
Resolution
Promotion &
Conversion
Default
Parameters in
Overloading
Summary
NPTEL MOOCs Programming in C++ Intructors: Abir Das and Sourangshu Bhattacharya 24