4.8函数的重载不仅允许函数的参数类型不同,还允许函数参数的个数不同(但是参数个数和类型同时相同时不能使用重载)
#include<iostream>
using namespace std;
int main()
{
int max(int a, int b, int c);
double max(double a, double b, double c);
long max(long a, long b, long c);
int i1, i2, i3, i;
cin >> i1 >> i2 >> i3;
i = max(i1, i2, i3);
cout << "i_max=" << i << endl;
double d1, d2, d3,d;
cin >> d1 >> d2 >> d3;
d = max(d1, d2, d3);
cout << "d_max=" << d << endl;
long g1, g2, g3, g;
cin >> g1 >> g2 >> g3;
g = max(g1, g2, g3);
cout << "g_max=" << g << endl;
}
int max(int a, int b, int c)
{
if (b > a)a = b;
if (c > a)a = c;
return a;
}
double max(double a, double b, double c)
{
if (b > a)a = b;
if (c > a)a = c;
return a;
}
long max(long a, long b, long c)
{
if (b > a)a = b;
if (c > a)a = c;
return a;
}
当函数体相同、参数个数相同而类型不同的情况可以使用函数模板,(参数个数不同时候不能用函数模板)
注意:函数模板必须在主函数的前面!
#include<iostream>
using namespace std;
template<typename T> //模板声明,T为类型参数
T max(T a, T b, T c)
{
if (b > a)a = b;
if (c > a)a = c;
return a;
}
int main()
{
int i1, i2, i3, i;
cin >> i1 >> i2 >> i3;
i = max(i1, i2, i3);
cout << "i_max=" << i << endl;
double d1, d2, d3,d;
cin >> d1 >> d2 >> d3;
d = max(d1, d2, d3);
cout << "d_max=" << d << endl;
long g1, g2, g3, g;
cin >> g1 >> g2 >> g3;
g = max(g1, g2, g3);
cout << "g_max=" << g << endl;
return 0;
}
两个例子执行效果相同:
当函数参数个数不同时使用重载函数的例子如下:
#include<iostream>
using namespace std;
int main()
{
int max(int a, int b, int c);
int max(int a, int b);
int a = 8, b = -12, c = 27;
cout << "max(a,b,c)=" << max(a, b, c) << endl;
cout << "max(a,b)=" << max(a, b) << endl;
return 0;
}
int max(int a, int b, int c)
{
if (b > a)a = b;
if (c > a)a = c;
return a;
}
int max(int a, int b)
{
if (a > b)return a;
else return b;
}
执行效果如图: