1.对于类模板来说,其功能是相同的,但数据类型是不同的。
2.关于类模板的声明和类模板对象的声明方法。
类模板声明:template<class 类型参数名>
类模板对象的声明:类模板名<实际类型名> 对象名(参数表列)
3.代码示例:
#include<iostream>
using namespace std;
template<class numtype>//声明一个类模板
class Compare
{
public:
Compare(numtype a, numtype b)//定义构造函数
{
x = a; y = b;
}
numtype sum()//定义一个sum函数,用于求和,类型暂定为numtype
{
return x + y;
}
private:
numtype x;
numtype y;
};
int main()
{
Compare<int>c1(6, 6);//定义int型对象
Compare<float>c2(6.5, 6.7);//定义float型对象
cout << c1.sum() << endl;
cout << c2.sum() << endl;
return 0;
}
4.上面的代码块中,成员函数实在类模板内定义的,如果要在类模板外定义成员函数,则需要用特殊形式的方法定义类模板外函数。
如:
template<class 类型参数>
类型名 类模板名<类型名>::函数名()
代码示例如下:
#include<iostream>
using namespace std;
template<class numtype>//声明一个类模板
class Compare//定义一个类模板名
{
public:
Compare(numtype a, numtype b)//定义有个构造函数
{
x = a; y = b;
}
numtype sum();//声明一个sum函数,返回类型为虚拟类型numtype
private:
numtype x;
numtype y;
};
template<class numtype>//在类外定义一个成员函数
numtype Compare<numtype>::sum()
{
return x + y;
}
int main()
{
Compare<int>c1(6, 6);//定义对象c1,并调用构造函数
Compare<float>c2(6.5, 6.7);//定义对象c2,并调用构造函数
cout << c1.sum() << endl;
cout << c2.sum() << endl;
return 0;
}
调试结果如下:
5.注意在类模板外定义一个成员函数时,别忘了声明类模板。
6.类模板的类型参数中的类型可以是两个以上,但每个类型前面都要加上class。