模板函数

    模板是C++中泛型编程的基础,是C++语言的一个重要特性。利用模板机制可以显著减少冗余信息,节约程序代码。

    模板函数,实际上就是建立一个通用的函数,函数的参数类型和返回类型不具体指定,利用虚拟的类型来代替,在编译调用模板函数时,编译器会根据传递的参数自动推演出模板形参的类型,并自动生成相应的代码。

//模板的声明格式:
template <typename 类型参数>
返回类型 函数名(模板形参表)
{
   ...(函数体)
}

template是声明模板的关键字。

类型参数通常用C++标识符表示,例如:T、TP、Type等,这就是一个虚拟的类型名,也可以自定义

类型参数前要加关键字typename或class,它俩的作用相同,可以互换,都表示其后的参数是一个虚拟的类型名,但typename的含义比class更清晰。

**************************************************************************************

//函数模板的使用

#include<iostream>
using namespace std;

template <typename T>
T min(T a, T b)
{
	if (a > b)
	{
		return b;
	}
	else
	{
		return a;
	}
}
int main()
{
	cout << "the min is:" << min(1, 2) << endl;
	cout << "the min is:" << min(1.1, 2.2) << endl;
	cout << "the min is:" << min<double>(1, 2.1) << endl;  //显示实例化
	cout << "the min is:" << min<int>(1.1, 2) << endl;    //显示实例化
	cout << "the min is:" << min('a', 'm') << endl;
	system("pause");
	return 0;
}

wKioL1b7p63R4dRYAAAEYqepkUo717.png

由上面的例子我们可以看出,函数模板提供了一类函数的抽象。上例的函数模板min(T,T)实例化成了函数min(int,int)、min(double,double)、min(char,char)。函数模板实现了函数参数的通用性,作为一种函数的重用机制,可以大幅提高程序设计的效率。

  我们也可以在调用函数的时候对参数列表进行显示实例化来指定虚拟类型的参数类型。

注:在template语句与函数模板定义语句间不能插入别的语句!!


************************************************************************************

//模板函数可以与非模板函数构成重载
#include<iostream>
using namespace std;

template <typename T>
T min(T a, T b)
{
	cout << "调用模板函数" << endl;
	return (a > b)?b:a;
}
int min(int a, int b)
{
	cout << "调用非模板函数"<<endl;
	return (a > b) ? b : a;
}
int main()
{
	cout << "the min is:" << min(1, 2) << endl;
	cout << "the min is:" << min(1.1, 2.2) << endl;
	cout << "the min is:" << min('a', 'm') << endl;
	system("pause");
	return 0;
}

wKioL1b7n53AB3nlAAAHxfWtbmY448.png

函数模板与同名的非模板函数构成重载时,函数调用时,先找一个参数完全匹配的非模板函数,如果找到就调用,找不到就找函数模板,将其实例化,产生一个与之匹配的模板函数。

本文出自 “言安阳” 博客,请务必保留此出处http://iynu17.blog.51cto.com/10734157/1758534

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值