首页 理论教育C++程序设计教程:类模板的使用

C++程序设计教程:类模板的使用

【摘要】:同样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。程序的一次执行如下:填充一个字符数组第1个数据:a↙第2个数据:b↙第3个数据:c↙第4个数据:d↙第5个数据:e↙数组的内容是:a b c d e填充一个双精度数组第1个数据:1.2↙第2个数据:5.6↙第3个数据:3.1↙数组的内容是:1.25.63.1图5.3类模板、模板类和对象之间的关系

同样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。

声明类模板之后,创建模板类的一般格式如下:

类模板名<类型实参表>对象表;

其中,“类型实参表”应与该类模板中的“模板参数表”相匹配。“对象表”是定义该模板类的一个或多个对象。

如对前面说明的类模板TClass的实例化可以这样进行:

TClass<double,500>sc;

实例化中所用的实参必须和类模板中定义的形参具有同样的顺序和类型,如以下实例化会造成编译错误:

TClass<double,500U>sc;

这是因为,类模板中定义的表达式参数int exp1和类型(unsigned int)500U不匹配。

使用类模板实例化模板类时要注意一个事情,在类模板中进行的运算必须适合于实例化时指定的类型。例如,前面例5.7中TClass1类模板,可以实例化为TClass1<int>或TClass1<double>,但实例化为TClass1<char>时出错,因为在调用add成员函数时不能进行两个字符的相加运算。

【例5.8】分析以下程序的执行结果。

解:上述程序中声明了一个类模板Array<T>,其私有数据成员size是一个整数,代表动态数组的大小,还有一个指针,当实例化模板类时,它指向定义类型的数组对象,构造函数中使用类型参数T来分配数组对象的空间,它的大小在模板类定义中已经确定:

Array<char>ac(10);

这样,实例化类模板Array<T>的模板类Array<char>,并实例化该模板类的对象ac,从而为ac对象定义和分配了内存空间,然后调用两个类成员函数fill_array和disp_array。该程序中的类模板、模板类和对象之间的关系如图5.3所示。程序的一次执行如下:(www.chuimin.cn)

填充一个字符数组(输入5个数据)

第1个数据:a↙

第2个数据:b↙

第3个数据:c↙

第4个数据:d↙

第5个数据:e↙

数组的内容是:a b c d e

填充一个双精度数组(输入3个数据)

第1个数据:1.2↙

第2个数据:5.6↙

第3个数据:3.1↙

数组的内容是:1.2 5.6 3.1

图5.3 类模板、模板类和对象之间的关系