c++ 泛型编程之类模板

1.定义:是对一批仅成员数据类型(成员函数和程序数据)不同的类的抽象。程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类。

2.语法

//类模板定义格式
template <<模板参数表>>//模板参数表里面是要用几个抽象参数
class <类模板名>
{
	<成员函数与成员变量>
};

//成员函数在类外定义格式
template <<模板参数表>>
<返回值类型><类模板名><<模板参数名列表>>::<成员函数名>(<参数表>)
{
	<函数体>
}

//类模板定义对象
类模板名<真实类型参数表>对象名(构造函数实际参数表)

3.原理

(1)编译器由类模板生成类的过程叫做类模板的实例化;

(2)编译器自动用具体的数据类型替换类模板中的类型参数,生成模板类的代码;

(3)由类模板实例化得到的类叫做模板类;

4.示例



5.二次编译机制

(1)在编译器进行编译的时候,编译器会产生类的模板函数的声明,当时实际确认类型后调用的时候,会根据调用的类型进行再次帮我们生成对应类型的函数声明和定义。

(2)在编译器进行编译的时候,编译器会产生类的模板函数的声明,当时实际确认类型后调用的时候,会根据调用的类型进行再次帮我们生成对应类型的函数声明和定义。解决方案:类的前置声明;友元模板函数的前置声明;友元模板函数声明需要增加泛型支持。

6.类模板与非类型参数

(1)语法

template <class T,int elementsNumber>

(2)限制

①整数

②枚举类型

③指针指向的对象不能在指针所定义的文件中定义,必须在别的文件中定义

④不能是浮点类型,不能是类类型!

(3)示例


更多推荐

c++ 泛型编程之类模板