C++函数模板

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;
}

结果图:
Sum

给同学们做一下解释:

首先是声明一个模板 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; 
}

结果图:
Max
这样int、double的混合应用就凸显了函数模板的优点,适应各种类型对象。
另外,与加法函数不同的是,在定义求最大值函数模板template <class type,int len>同时使用到了模板类型参数type和模板非类型参数len。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值