第11章 模板
练习题11
11.1 判断题
√ 1. 使用模板的目的是为了避免重复性劳动。
× 2. 函数模板是一个实实在在的函数,编译系统会产生执行代码。
√ 3. 由函数模板中参数化的类型被替换后所生成的函数被称为模板函数。
√ 4. 函数模板中参数化的类型可以用任何一种类型代替。
√ 5. C++中的模板分为函数模板和类模板两种。
√ 6. 模板类是类模板的实例化。
× 7. 模板类在程序中不可以定义对象,或者说明函数的参数或返回值。
√ 8. 类模板的对象或对象引用可以用来作为函数的参数
√ 9. 类模板作为基类可生成派生的类模板。
× 10. 类模板不能被继承,但可以继承。
× 11. 如果类模板的模板类型参数有多个,除第1个模板类型参数前使用关键字class,其余的模板类型参数前都不使用关键字class。
√ 12. 定义类模板至少要确定一个模板类型参数。
11.2 单选题
1. 在下列函数模板的定义中,正确的是( B )。
A. template B. template
void fun(T, S); T fun(T, S);
C. template D. template
void fun(T); T fun(T, int);
2.已定义的函数模板如下:
template
T max(T a,T b)
{
return a>b ? a:b;
}
下列描述中,( C )是错误的。
A. 该函数模板只有一个模板类型参数
B. 该函数模板生成的模板函数中其参数和返回值的类型必须相同
C. 该函数模板生成的模板函数中,其参数和返回值类型可以不同
D. T类型所规定的类型范围对运算符“>”操作必须有定义
3. 在2题所定义的函数模板中,生成下列模板函数,( D )是错误的。
A. max(int, int) B. max(double, double)
C. max(char, char) D. max(int, double)
4. 关于函数模板,描述错误的是( A )。
A. 函数模板必须由程序员实例化为可执行的函数模板
B. 函数模板的实例化由编译器实现
C. 一个类定义中,只要有一个函数模板,则这个类是类模板
D. 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
5. 下列的模板说明中,正确的是( D )。
A. template B. template
C. template D. template
6. 在下列关于类模板的描述中,( A )是错误的。
A. 定义类模板时只允许有一个模板类型参数
B. 类模板的类体内说明的成员函数的实现都与函数模板类似
C. 由类模板生成特定的模板类时,必须指定参数化的类型所代表的类型
D. 类模板所描述的是一组类
7. 函数模板定义如下:
template
Max( T a, T b ,T &c)
{
c=a+b;
}
下列选项正确的是(B )。
A. int x, y; char z; B. double x, y, z;
Max(x, y, z); Max(x, y, z);
C. int x, y; float z; D. float x; double y, z;
Max(x, y, z); Max(x,y, z);
8. 下列有关模板的描述,错误的是( D )。
A. 模板把数据类型作为一个设计参数,称为参数化程序设计。
B. 使用时,模板参数与函数参数相同,是按位置而不是名称对应的。
C. 模板参数表中可以有类型参数和非类型参数。
D. 类模板与模板类是同一个概念。
9. 类模板的使用实际上是将类模板实例化成一个(C )。
A. 函数 B. 对象 C. 类 D. 抽象类