c++语言提供了template关键字用于定义模板。
#include <stdio.h>
template <class type,int nLen> //定义一个模板类型
type Max(type Array[nLen]) //定义函数模板
{
type tRet = Array[0]; //定义一个变量
for(int i=1; i<nLen; i++) //遍历数组元素
{
tRet = (tRet > Array[i])? tRet : Array[i]; //比较数组元素大小
}
return tRet; //返回最大值
}
int main(int argc, char* argv[])
{
int nArray[5] = {1,2,3,4,5}; //定义一个整型数组
int nRet = Max<int,5>(nArray); //调用函数模板Max
double dbList[3] = {10.5,11.2,9.8}; //定义实数数组
double dbRet = Max<double,3>(dbList); //调用函数模板Max
return 0;
}
其中,template为关键字,表示定义一个模板,<>表示模板参数,模板参数主要有两种,一种是模板类型参数,另一种是模板非类型参数。其后是一个用户定义的合法的标识符,本例为type,也可以是其他合法标识符。
重载函数模板:
具有相同名称但是参数不同的函数模板,成为重载模板。
#include "stdio.h"
#include "iostream.h"
template <class type> //定义一个模板类型
type Add(type Plus,type Summand) //定义一个重载的函数模板
{
return Plus + Summand; //返回两个数之和
}
template <class type> //定义一个模板类型
type Add(type Array[], int nLen) //定义一个重载的函数模板
{
type tRet = 0; //定义一个变量
for(int i=0; i<nLen; i++) //利用循环累计求和
{
tRet += Array[i];
}
return tRet; //返回结果
}
int main(int argc, char* argv[]) //主函数
{
int nRet = Add(100, 200); //调用第一个重载的函数模板,实现两个数的求和运算
cout << "整数之和: " << nRet << endl; //输出结果
int nArray[5]= {1, 2, 3, 4, 5}; //定义一个整型数组
int nSum = Add(nArray, 5); //调用第2个重载的函数模板,实现数组元素的求和运算
cout << "数组元素之和:" << nSum << endl; //输出结果
return 0;
}