1.定义:是对一批仅成员数据类型(成员函数和程序数据)不同的类的抽象。程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类。
2.语法
template <<模板参数表>>
class <类模板名>
{
<成员函数与成员变量>
};
template <<模板参数表>>
<返回值类型><类模板名><<模板参数名列表>>::<成员函数名>(<参数表>)
{
<函数体>
}
类模板名<真实类型参数表>对象名(构造函数实际参数表)
3.原理
(1)编译器由类模板生成类的过程叫做类模板的实例化;
(2)编译器自动用具体的数据类型替换类模板中的类型参数,生成模板类的代码;
(3)由类模板实例化得到的类叫做模板类;
4.示例
5.二次编译机制
(1)在编译器进行编译的时候,编译器会产生类的模板函数的声明,当时实际确认类型后调用的时候,会根据调用的类型进行再次帮我们生成对应类型的函数声明和定义。
(2)在编译器进行编译的时候,编译器会产生类的模板函数的声明,当时实际确认类型后调用的时候,会根据调用的类型进行再次帮我们生成对应类型的函数声明和定义。解决方案:类的前置声明;友元模板函数的前置声明;友元模板函数声明需要增加泛型支持。
6.类模板与非类型参数
(1)语法
template <class T,int elementsNumber>
(2)限制
①整数
②枚举类型
③指针指向的对象不能在指针所定义的文件中定义,必须在别的文件中定义
④不能是浮点类型,不能是类类型!
(3)示例