前言:
本文主要讲解函数的重载与函数模板。
一,重载。
重载就是定义多个书和类型不同的同名函数。
在前文中,我们曾写过一个判断用户所输入的数大小的C++程序:
#include <iostream>
using namespace std;
inline int max(int a,int b){
if(a>b)
return a;
else
return b;
}
int main ()
{
int c,d,e;//定义两个整数
cout<<"请输入两个整数:";//提示用户输入
cin>>c>>d;//获取所输入两个整数
e=max(c,d);//调用函数,并将两个整数作为参数传入
cout<<"较大的数是:"<<e<<endl;//输出结果
return 0;
}
可以看到,它可以判断用户所输入的整数大小;若想判断小数大小就需要把里面的int全部更改double。若想同时判断,还需要在此基础上,加一个判断语句。
所有代码为:
#include <iostream>
using namespace std;
int main() {
float f1, f2;
int i1, i2;
cout << "请输入第一个浮点数: ";
cin >> f1;
cout << "请输入第二个浮点数: ";
cin >> f2;
cout << "请输入第一个整数: ";
cin >> i1;
cout << "请输入第二个整数: ";
cin >> i2;
if (f1 > f2) {
cout << f1 << ">" << f2 << endl;
} else if (f1 < f2) {
cout <<f1 << "<" << f2<< endl;
} else {
cout <<f1<<"="<<f2 << endl;
}
if (i1 > i2) {
cout << i1 << ">" << i2<< endl;
} else if (i1 < i2) {
cout << i1 << "<" << i2<< endl;
} else {
cout << i1<<"="<<i2<< endl;
}
return 0;
}
若使用重载,就可以用更简洁的方法实现,代码为:
# include <iostream>
using namespace std;
int max(int x, int y);
double max(double x, double y);
int main(){
int a,b;
double c,d;
cout << "请输入两个整数: ";
cin >> a >> b;
cout << "请输入两个浮点数:";
cin >> c >> d;
cout << "整数中较大的数是: " << max(a,b) << endl;
cout << "浮点数中较大的数是: " << max(c,d) << endl;
return 0;
}
int max(int x, int y){
return x > y ? x : y;
}
double max(double x, double y){
return x > y ? x : y;
}
该函数调用了两种max函数,一种是int型,一种是double型,两者都顺利调用;也就是所,重载函数后,调用时会根据传递参数的不同,调用与之相对应的策略。
二,函数模板。
现在我们知道可以利用重载来定义同名函数;但是在上文中的函数中,尽管除数据类型之外完全相同,却需要使用两个函数来处理。
因此,C++提供了另一种更便利的方式,可以通过创建函数模板,仅数据不同的函数都可以使用此模型,这种模型被称为函数模型;要使用函数模板,必须经历以下步骤:
1,声明或定义函数模板。
2,调用函数(函数自动生成)。
1,使用函数模板。
语法:
template <class 模板参数列表> //指定替换类型名
函数的声明或定义
例如,还是判断键盘输入的整数和浮点数的大小:
# include <iostream>
template <class T>
T max(T a, T b){
return (a>b)?a:b;
}
int main(){
int a , b;
double c , d;
std::cout << "请输入两个整数: ";
std::cin >> a >> b;
std::cout << "请输入两个浮点数: ";
std::cin >> c >> d;
std::cout << "在" << a << " 和" << b << " 中最大的是: " << max(a, b) << std::endl;
std::cout << "在" << c << "和" << d << " 中最大的是: " << max(c, d) << std::endl;
return 0;
}
与之前所写的代码相比,极为简洁;运行结果为:
2,注意事项。
在使用函数模板与重载的时候,应注意using namespace std;的使用,将std
命名空间中的所有符号引入到全局命名空间中。而在全局命名空间中,已经存在一个名为max
的函数模板,用于比较两个值的大小。这与你自己定义的max
函数发生了冲突。
如果存在,则会出现: