跳转至

练习09-模板

练习09-模板

题量: 20 满分: 100
作答时间:05-10 19:45 至_06-26 19:45_

1.(单选题) 类模板的使用实际上是将类模板实例化成一个( )。

  • A. 函数
  • B. 对象
  • C. 类
  • D. 抽象类

2.(单选题) 下列类模版的定义中语法格式不正确的是( )。

  • A. templateclass Buffer{ };
  • B. templateclass Buffer{ };
  • C. templateclass Buffer{ };
  • D. templateclass Buffer{ };

3.(单选题) 如下函数模板的功能是将U类型数据转换为T类型数据。

template <typename T, typename U>  
T cast(U u)     return u;    
已知 i 为 int 型变量,下列对模板函数 cast 的调用中正确的是( )。
- A. cast(i);
- B. cast<>(i);
- C. cast(i);
- D. cast(i);

4.(单选题) 类模板的模板类型参数( )。

  • A. 能作为数据成员的类型
  • B. 可作为成员函数的返回类型
  • C. 可作为成员函数的参数类型
  • D. 以上三种类型均可

5.(单选题) 下列关于函数模板的描述中,正确的是( )。

  • A. 函数模板是一个实例函数
  • B. 使用函数模板定义的函数没有返回类型
  • C. 函数模板的类型参数与函数的参数相同
  • D. 通过使用不同的类型参数,可以从函数模板得到不同的实例函数

6.(单选题)

若mytemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列:

mytemp<double>  p2;       mytemp<long>  p3[2];  
编译系统在处理上面的语句序列时,所生成的模板mytemp的实例的个数是( )。
- A. 1
- B. 2
- C. 3
- D. 0

7.(单选题) 如下程序在编译过程中,函数模板max被实例化的次数是( )。

template<typename T>  
T max(T d1,T d2)     return d1>d2 ? d1 : d2;      
int main()   
  cout<<max(3,5)<<max(5,3)<<max(5.0,max(3.6,5.5));   
  
- A. 1次
- B. 2次
- C. 3次
- D. 4次

8.(单选题) 模板对类型的参数化提供了很好的支持,因此 ( )。

  • A. 类模板的主要作用是生成抽象类
  • B. 类模板实例化时,编译器将根据给出的模板实参生成一个类
  • C. 在类模板中的数据成员都具有同样类型
  • D. 类模板中的成员函数都没有返回值

9.(单选题) 下列关于类模板的描述中,错误的是( )。

  • A. 类模板的成员函数都是模板函数
  • B. 可以为类模板参数设置默认值
  • C. 类模板描述了一组类
  • D. 类模板中只允许有一个类型参数

10.(单选题) 有如下模板声明:

template<typename T1, typename T2> class A;  
下列声明中,与上述声明不等价的是( )。
- A. template class A;
- B. template class A;
- C. template class A;
- D. template class A;

11.(单选题) 下列有关模板的叙述中,正确的是( )。

  • A. 函数模板不能含有常规形参
  • B. 函数模板的一个实例就是一个函数定义
  • C. 类模板的成员函数不能是模板函数
  • D. 用类模板定义对象时,绝对不能省略模板实参

12.(单选题) 下面是一个模板声明的开始部分:

template<typename T> double   
由此可知( )。
- A. 这可能是一个函数模板的声明
- B. 这可能是一个类模板的声明
- C. 这既可能是一个函数模板的声明,也可能是一个类模板的声明
- D. 这肯定是一个错误的模板声明

13.(单选题) 下列关于模板的叙述中,错误的是( )。

  • A. 调用函数模板时,在一定条件下可以省略模板实参
  • B. 可以用int、double这样的类型修饰符来声明模板参数
  • C. 模板声明中的关键字class都可以用关键字typename替代
  • D. 模板的形参表中可以有多个参数

14.(单选题) 下列关于模板的说法正确的是( )。

  • A. 模板的实参在任何时候都可以省略
  • B. 类模板与模板类所指的是同一概念
  • C. 类模板的参数必须是虚拟类型的
  • D. 类模板中的成员函数全部都是模板函数

15.(单选题) 下列关于模板的叙述中,错误的是( )。

  • A. 调用函数模板时,有时可以省略模板实参
  • B. 函数模板的每个实例就是一个函数定义
  • C. 类模板的每个实例就是一个类定义
  • D. 类模板的实例是一个类对象

16.(单选题) 下列类模板的定义中语法格式错误的是( )。

  • A. templateclass Buffer{//};
  • B. templateclass Buffer{//};
  • C. templateclass Buffer{//};
  • D. templateclass Buffer{//};

17.(单选题) 在定义函数模板或类模板时,开头的关键字是( )。

  • A. typename
  • B. template
  • C. class
  • D. typedef

18.(单选题) 若有函数模板mySwap和一些变量定义如下:

template<class T>void mySwap(T X,T Y);  
double d1,d2;  
int i1,i2;  
下列对mySwap的调用中,错误的是( )。
- A. mySwap(i1,i2)
- B. mySwap(d1,d2)
- C. mySwap(i1,d1)
- D. mySwap(i2,d2)

19.(单选题) 有如下函数模板定义:

template <class T1,class T2>  
T1 FUN(T2 n)    return n*5.0;     
若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为( )。
- A. FUN(9)
- B. FUN<9>
- C. FUN (9)
- D. FUN<9>(double)

20.(单选题) 有函数模板声明和一些变量定义如下:

template <class T1,class T2,class T3>  
T1 sum(T2 x,T3 y)T1 z;return z;  
double d1,d2;  
则下列调用中,错误的是( )。
- A. sum(d1,d2);
- B. sum(d1,d2);
- C. sum(d1,d2);
- D. sum(d1,d2);


练习09-模板答案

正确答案列表:

  1. C
  2. D
  3. D
  4. D
  5. D
  6. B
  7. B
  8. B
  9. D
  10. D
  11. B
  12. A
  13. C
  14. D
  15. D
  16. D
  17. B
  18. C
  19. C
  20. D