函数模板和类模板

函数模板

template<class类型参数1,class类型参数2,…>
返回值类型 模板名(形参表)
{
函数名
};

template<class T>
void Swap(T &x,T &y)
{
	T tmp=x;
	x=y;
	y=tmp;
}

求数组最大元素的MaxElement函数模板

template<class T>
T MaxElement(T a[],int size)
{
	T tepMax=a[0];
	for(int i=1;i<size;++i)
		if(tmpMax<a[i])
			tmpMax=a[i];
	return tmpMax;
}

不通过参数实例化函数模板

#include<iostream>
using namespace std;
template<class T>
T Inc(T n)
{
	return 1+n;
}
int main()
{
	cout<<Inc<double>(4)/2;//输出2.5
	return 0;
}

函数模板的重载
函数模板可以重载,只要它们的形参表类型参数表不同即可。
函数模板和函数的次序
在有参数完全匹配和函数模板名字相同的情况下,编译器如何处理一条函数调用语句

1.先找参数完全匹配的普通函数(非由模板实例化而得得函数)
2.再找参数完全匹配得模板函数。
3.再找是参数经过自动类型转化后能够匹配的普通函数。
4.上面的都找不到,则报错。

匹配模板函数时,不进行类型自动转换

类模板

template<typename类型参数1,typename类型参数2,…>
//类型参数表
class 类模板名
{
成员函数和成员变量
};
类模板示例:Pair类模板

template<class T1,class T2>
class Pair
{
public:
			T1 key;
			T2 value;
			Pair(T1 k,T2 v):key(k),value(v)	{	};
			boll operator<(const Pair<T1,T2>&p)const;
};
template<class T1,class T2>
boll Pair<T1,T2>::operator<(const Pair<T1,T2>&p)const
//Pair的成员函数 operator<
{
	return key<p.key;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值