国家二级C++机试(运算符重载、模板和C++流)模拟试卷3
选择题
1.下列关于函数模板的描述中,正确的是( )。(D)
A. 函数模板是一个实例函数
B. 使用函数模板定义的函数没有返回类型
C. 函数模板的类型参数与函数的参数相同
D. 通过使用不同的类型参数,可以从函数模板得到不同的实例函数
解析:函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。
2.有如下函数模板定义:
template<typename T1,Typename T2>
T1 Fun(T2 n){ return n*5.0;}
若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为( )。(C)
A. FUN(9)
B. FUN<9>
C. FUN<double>[9]
D. FUN<9>(double)
解析:根据函数模板的定义,在选项C的调用中,把double类型传递给T1,int型传递给T2。
3.已知主函数中通过如下语句序列实现对函数模板swap的调用:
int a[10],b[10];
swap(a,b,10);
下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是( )。(B)
A. template<typename T>
void swap(T a[],T b[],int size);
B. template<typename T>
void swap(int size,T a[],T b[]);
C. template<typename T1,typename T2>
void swap(T1 a[],T2 b[],int size};
D. template<class T1,class T2>
void swap(T1 a[],T2 b[],int size);
解析:由题目中函数swap(a,b,10)调用语句可知,在对函数模板swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。
4.在定义函数模板或类模板时,开头的保留字是( )。(B)
A. typename
B. template
C. class
D. typedef
解析:定义函数模板或类模板时,开头的保留字是template。
5.若有函数模板mySwap和一些变量定义如下:( )。
template<class T>void mySwap(T x,T y);
double d1,d2;int i1,i2;
下列对mySwap的调用中,错误的是(C)
A. mySwap(i1,i2)
B. mySwap(d1,d2)
C. mySwap(i1,d 1)
D. mySwap<int>(i2,d2)
解析:按照函数模板mySwap的定义,变量x和y应该是同一类型,而在选项C的定义中变量i1和d1属于不同的数据类型。
6.模板对类型的参数化提供了很好的支持,因此( )。(B)
A. 类模板的主要作用是生成抽象类
B. 类模板实例化时,编译器将根据给出的模板实参生成一个类
C. 在类模板中的数据成员都具有同样类型
D. 类模板中的成员函数都没有返回值
解析:此题考查了类模板的概念。在定义对象的过程中,系统会自动地根据需要生成相应的类定义,这种依据类模板生成具体类的过程称为类模板的实例化。
7.关于关键字class和typename,下列表述中正确的是( )。(A)
A. 程序中的typename都可以替换为class
B. 程序中的class都可以替换为typename
C. 在模板形参表中只能用typename来声明参数的类型
D. 在模板形参表中只能用class或typename来声明参数的类型
解析:此题考查的是class和typename两个关键字。关键字class除了能用来定义类以外还能用来声明模板的虚拟类型参数。在用作声明虚拟类型参数时typename与class可以互换,但不能使用typename来定义类;在模板形参表中除了可以用typename和Class声明虚拟类型参数外,还可以使用普通类型声明常规函数,故选项C错误。
8.下列模板声明中,有语法错误的是( )。
D
解析:第四个选项是定义类模板的,但是class前面的T是多余的。对于第二个选项,同一个类的对象相乘还是同一个类的对象,但是可能要考虑溢出的问题。
9.在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是( )。(C)
A. ( )
B. [ ]
C. < >
D. { )
解析:声明一个类模板的格式是:template<<模板形参声明>><类声明>。
10.有如下模板声明:
template<typename T 1,typename T2>ClaSS A;
下列声明中,与上述声明不等价的是( )。(D)
A. template<class T1,class T2>class A;
B. template<class T1,typename T2>class A;
C. template<typename T1,class T2>class A;
D. template<typename T1,T2>class A;
解析:在类模板中,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。声明一个类模板的格式是:template<<模板形参表声明>><类声明>,<模板形参表声明>是由一个或多个模板形参组成。对于本题来说,模板形参表中包括类型T1和T2两个类型参数,而在选项D)中T1说明其类型,而T2没有说明其类型,与题干中的模板说明不一致。
11.若MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列
MyTemp<double>p2;
MyTemp<long>p3[2];
编译系统在处理上面的语句序列时,所生成的模板MyTemp的实例的个数是( )。(C)
A. 1
B. 2
C. 3
D. 0
解析:p2是一个double型的MyTemp,p3[2]是一个long.型MyTemp数组,其中包括两个元素。所以共有3个MyTemp的实例。
12.下列关于模板的叙述中,错误的是( )。(D)
A. 调用模板函数时,有时可以省略模板实参
B. 函数模板的每个实例就是一个函数定义
C. 类模板的每个实例就是一个类定义
D. 类模板的实例是一个类对象
解析:在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例。
13.下列类模板的定义中语法格式错误的是( )。
本文档预览:3600字符,共6729字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载