和函数模板一样,类模板是创建一个可以通用的类。这个类中,数据成员的类型、成员函数的返回类型以及参数的类型也不做具体的制定,同样用一个虚拟类型来代表,当使用类模板建立对象时,系统会根据实参的类型来取代模板中的虚拟类型从而实现不同类的功能。
形式:
template <typename或class 类型参数>
class 类名
{
类成员声明。
}
在类成员声明里,成员数据类型、成员函数的返回类型和参数类型前面需加上类型参数。在类模板中成中函数即可以定义在类模板内,也可以定义在类的模板外,当定义在类模板外时,需要在成员函数定义之前进行模板声明,且在成员函数名之前加上“类名<类型参数>。形式如下;
template <typename 或class 类型参数>
返回值类型 类名<类型参数>::函数名(形参)
{
函数体。
}
当使用类模板定义对象的时候如下:
类模板名<实际类型> 对象名;
类模板名<实际类型>对象名(实参);
template <class T>
class myClass
{
public:
T num;
void show();
};
//函数的实现不能放在cpp,
using namespace std;
template<class T>
void myClass<T>::show()
{
cout<<"num="<<num<<endl;
}
int main(int argc, const char * argv[])
{
myClass<int>m; //T的类型是int.
m.num=20;
m.show();
return 0;
}