模版把函数或类要处理的数据类型参数化,表现为参数的多态性。模版用于表达逻辑结构相同,且具体数据元素类型不同的数据对象的通用行为,从而使得程序可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递。
函数模版参考代码:
#include <iostream>
using namespace std;
template <class T> //<>中也可以写成<typename T>,效果是一样的。
T _min(T x,T y) //注意所起的函数名不能和原有库中的函数名冲突,否则编译报错。
{
if(x<y){
return x;
}else{
return y;
}
}
int main()
{
int n1=2,n2=10;
double d1=1.5,d2=5.6;
cout << "较小整数:"<< _min(n1,n2) << endl;
cout << "较小实数:"<< _min(d1,d2) << endl;
return 0;
}
运行结果截图:
--------------------------------------------------------------------------------------------------------------------------------------
类模版参考代码:
#include <iostream>
using namespace std;
template <class T>
class Array
{
int size;
T *aptr; //T为类型参数
public:
Array(int slots=1)
{
size=slots;
aptr=new T[slots]; //为动态数组分配内存空间
}
void fill_Array();
void disp_Array();
~Array()
{
delete [] aptr;
}
};
template <class T>
void Array<T>::fill_Array()
{
cout << "(输入" << size << "个数据)" << endl;
for ( int i=0;i<size;i++)
{
cout << " 第" << i+1 << "个数据:";
cin >> aptr[i];
}
}
template <class T>
void Array<T>::disp_Array()
{
for (int i=0;i<size;i++)
{
cout << aptr[i] << " ";
}
cout << endl;
}
int main()
{
Array<char> ac(5); //Array<char>为模板类,ac(5)定义模板类的对象
cout << "填充一个字符数组";
ac.fill_Array();
cout << "数组的内容是:";
ac.disp_Array();
Array<double> ad(3); //Array<double>为模板类,ad(3)定义模板类的对象
cout << "填充一个双精度数组:" << endl;
ad.fill_Array();
cout << "数组的内容是:";
ad.disp_Array();
}
运行结果截图:
以上代码在G++中编译运行成功。
(-----------完-----------)