C++函数模板
模板是C++的高级特性,分为函数模板和类模板。
使用模板能够快速建立里具有类型安全的类库集合和函数集合。
关于类模板的学习————》》C++类模板
本文主要介绍函数模板。
函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板最后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定功能。
函数模板定义形式如下:
template <参数类型及参数> 返回类型 函数名(形式参数){
//函数体
}
也可以声明函数模板分成template部分和函数部分:
template <参数类型>
返回类型 函数名(形式参数){
//函数体
}
template为关键字,表示定义一个模板。
<>表示模板参数,模板参数有两种,是模板类型参数、模板非类型参数。模板类型参数使用关键字class或typedef开始,后面跟一个合法类型名。模板非类型参数与普通参数定义相同,通常是一个常数。可以不使用模板非类型参数。
下面将以求和函数为例解释函数模板的使用
源代码:
#include<iostream>
using namespace std;
//定义求和函数模板
template <class type>type Sum(type x,type y){
return x+y;
}
int main(){
int a=2000, b=20;
int s1=Sum<int>(a,b); //调用函数模板
double a2=1111.11, b2=0.11;
double s2=Sum<double>(a2,b2); //调用函数模板
cout<<s1<<" "<<s2<<endl;
return 0;
}
结果图:
给同学们做一下解释:
首先是声明一个模板 template < class type >
然后是定义函数模板的具体实现方法 type Sum(type x,type y){return x+y;}
单独观察具体实现方法,我们很容易联想到普通的自定义函数。
//函数模板 //自定义函数
type Sum(type x,type y){ //int Sum(int x,int y){
return x+y; //return x+y;
} //}
相比之下,模板函数在声明类型的情况下可以实现各种运算,而自定义函数只能实现单纯的int运算。
所以,定义函数模板的优点就是适应各种类型对象的计算及输入输出。
最后就是函数模板的调用 s1=Sum< int >(a,b);s2=Sum< double >(a2,b2);
< int >、< double >就是使用模板的方式,即模板类型。若除去<>,就变成了s1=Sum(a,b);s2=Sum(a2,b2);跟自定义函数的使用方法相同。
函数模板的入门应用
使用数组作为模板参数,分别输出int数组、double数组的最大值
源代码:
#include<iostream>
using namespace std;
template <class type,int len>type Max(type a[]){
type m=a[0];
for(int i=1;i<len;i++){
if(m<a[i])
m=a[i];
}
return m;
}
int main(){
int x[5]={1, 3, 6, 4, 2};
double y[5]={1.2, 3.9, 10.5, 7.0, 6.6};
int max1=Max<int,5>(x);
double max2=Max<double,5>(y);
cout<<max1<<endl;
cout<<max2<<endl;
return 0;
}
结果图:
这样int、double的混合应用就凸显了函数模板的优点,适应各种类型对象。
另外,与加法函数不同的是,在定义求最大值函数模板template <class type,int len>同时使用到了模板类型参数type和模板非类型参数len。