为了说明类模板,先看一个类模板的例子
#include <iostream>
using namespace std;
template<class T>
class Compare//定义一个比较类(用于比较两个数的大小)
{
public:
//使用初始化表的形式初始化数据成员
Compare(T x, T y):a(x),b(y){}
T max(void)//比较两个数据,并且返回最大值
{
return a > b ? a : b;
}
T min(void)//比较两个数据,并且返回最小值
{
return a < b ? a : b;
}
//显示比较的数据
void show( );
private://两个比较的数
T a;
T b;
};
//显示比较的数据
template<class T>
void Compare<T>::show( )
{
cout<<a<<" "<<b;
}
void main()
{
Compare<int> cmp1(1,2);
Compare<float> cmp2(3.55,2.7);
Compare<char> cmp3('A','z');
cmp1.show();
cout<<" 中最大的数是:"<<cmp1.max()<<endl;
cmp1.show();
cout<<" 中最小的数是:"<<cmp1.min()<<endl;
cmp2.show();
cout<<" 中最大的数是:"<<cmp2.max()<<endl;
cmp2.show();
cout<<" 中最小的数是:"<<cmp2.min()<<endl;
cmp3.show();
cout<<" 中最大的字符是:"<<cmp3.max()<<endl;
cmp3.show();
cout<<" 中最小的字符是:"<<cmp3.min()<<endl;
system("pause");
}
执行结果:
上面的程序是实现比较两个数据的大小
代码还可以写成下面的形式
#include <iostream>
using namespace std;
template<class T>
class Compare//定义一个比较类(用于比较两个数的大小)
{
public:
//使用初始化表的形式初始化数据成员
Compare(T x, T y);
T max(void);//比较两个数据,并且返回最大值
T min(void);//比较两个数据,并且返回最小值
void show( );//显示数据
private://两个比较的数
T a;
T b;
};
//使用初始化表的形式初始化数据成员
template <class T>
Compare<T>::Compare(T x, T y)
{
a = x;
b = y;
}
template <class T>
T Compare<T>::max(void)//比较两个数据,并且返回最大值
{
return a > b ? a : b;
}
template <class T>
T Compare<T>::min(void)//比较两个数据,并且返回最小值
{
return a < b ? a : b;
}
//显示比较的数据
template<class T>
void Compare<T>::show( )
{
cout<<a<<" "<<b;
}
void main()
{
Compare<int> cmp1(1,2);
Compare<float> cmp2(3.55,2.7);
Compare<char> cmp3('A','z');
cmp1.show();
cout<<" 中最大的数是:"<<cmp1.max()<<endl;
cmp1.show();
cout<<" 中最小的数是:"<<cmp1.min()<<endl;
cmp2.show();
cout<<" 中最大的数是:"<<cmp2.max()<<endl;
cmp2.show();
cout<<" 中最小的数是:"<<cmp2.min()<<endl;
cmp3.show();
cout<<" 中最大的字符是:"<<cmp3.max()<<endl;
cmp3.show();
cout<<" 中最小的字符是:"<<cmp3.min()<<endl;
system("pause");
}
执行结果和上面的代码一样
类模板的形式:template<class 类型名>
如:template<class T> T表示数据类型名
类模板中的成员函数在函数外部定义的形式:
template<class 类型名>
类名<类型名> ::成员函数名
如:
template<class T>
Complare<T>::show()