1:使用template关键字不但可以定义函数模板,而且可以定义类模板。类模板代表一族类,它是用来描述通用数据类型或处理方法的机制,它使类中的一些数据成员和成员函数的参数或返回值可以取任意数据类型。类模板可以说是用类生成类,减少了类的定义和数量。
2:类模板的一般定义形式如下:
template <类型形式参数表> class 类模板名
{
...//类模板体
}
类模板成员函数的定义形式如下:
template <类型形式参数表>
返回类型 类模板名 <类型名表>::成员函数名(形式参数列表)
{
...//函数体
}
其中,template是关键字,类型形式参数表与函数模板的定义相同。类模板的成员函数定义时的类模板名誉类模板定义时要一致。类模板不是一个真是的类,需要重新生成类,生成累的形式如下:
类模板名<类型实在参数表>
用新生成的类定义对象的形式如下:
类模板名<类型实在参数表>对象名
其中,类型实在参数表应与该类模板中的类型形式参数表匹配。用类模板生成的类称为模板类。类模板和模板类不是同一个概念,类模板是模板的定义,不是真是的类,定义中要用到类型参数,模板类本质上与普通类相同,它是类模板的类型参数实例化之后得到的类。
3:类模板中的类型形式参数表可以在执行时指定,也可以在定义类模板时指定。实例代码如下:
// 9.3.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; template<class T1,class T2> class MyTemplate { T1 t1; T2 t2; public: MyTemplate(T1 tt1,T2 tt2) {t1 =tt1, t2=tt2;} void display() { cout << t1 << ' ' << t2 << endl;} }; void main() { int a=123; double b=3.1415; MyTemplate<int ,double> mt(a,b); mt.display(); }
运行结果: