Suppose you would like to write a myMax() function template that returns a minimum of two numbers with any data type
But, what if
if you like the myMax() template function to behave in one way for all the data types except one?
In this situation, we can override the myMax() function template for that specific data type
in other words, we need to provide a non-templated function for that type
#include <iostream>
using namespace std;
// One function works for all data types.
template <class T>
T myMax(T x, T y)
{
return (x > y) ? x : y;
}
int main()
{
int i=0,j=20;
// Call myMax for int
cout << myMax(i, j) << endl;
// call myMax for double
double d=1.1,e=9.11;
cout << myMax(d, e) << endl;
// call myMax for char
char ch='A', dh='Z';
cout << myMax(ch, dh) << endl;
return 0;
}
Output
20
9.11
Z
To demonstrate, let us say we would like the data type double should use different logic than the myMax() function template then, in that case, we can override it as shown below
#include <iostream>
using namespace std;
// One function works for all data types.
template <class T>
T myMax(T x, T y)
{
return (x > y) ? x : y;
}
//Function template overriding
double myMax(double x, double y)
{
return (x > y) ? y : x;
}
int main()
{
int i=0,j=20;
// Call myMax for int
cout << myMax(i, j) << endl;
// call myMax for double
double d=1.1,e=9.11;
cout << myMax(d, e) << endl;
// call myMax for char
char ch='A', dh='Z';
cout << myMax(ch, dh) << endl;
return 0;
}
Output
20
1.1
Z
Leave a Reply