1、国家二级 C+机试(模板)模拟试卷 1及答案与解析 一、选择题 1 下列关于模板的叙述中,错误的是 ( )。 ( A)模板声明中的第一个符号总是关键字 template ( B)在模板声明中用 括起来的部分是模板的形参表 ( C)类模板不能有数据成员 ( D)在一定条件下函数模板的实参可以省略 2 有如下函数模板定义: template T func(Tx, Ty)return x*x+y*y; ) 在下列对 func的调用中,错误的是 ( )。 ( A) func(3, 5); ( B) func(3 0; 5 5); ( C) func(3, 5 5); ( D) func(3, 5 5)
2、; 3 有如下函数模板: template T cast(U u)return u; 其功能是将 U类型数据转换为 T类型数据。已知 i为 int型变量,下列对模板函数 cast的调用中正确的是 ( )。 ( A) cast(i); ( B) cast,其中的 是由一个或多个 组成 (如果是多个,需要用逗号隔开 )。 每个 具有下面的几种形式: typename class 由此可知,模板形参表必须用括弧 , 是由一个或多个模板形参组成。在定义类模板时,可以为模板形参表声明的最后若干个参数设置默认值。 14 【正确答案】 C 【试题解析】 对于函数模板,数据类型本身成了它的参数,是一种参数化类
3、型的函数。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。 15 【正确答案】 D 【试题解析】 虚拟类型参数 T1没有出现在模板函数的形参表中,因此在调用时不可能从模板函数的实参表中获得相应的信息,因此 T1无法省略。而在选项 D)中省略了。 16 【正确答案】 D 【试题解析】 函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。 17 【正确答案】 C 【试题解析】 根据函数模板的定义,在选项 C的调用中,把 double类型传递给T1, int型传递给 T2。
4、 18 【正确答案】 D 【试题解析】 同一模板的声明和定义中,模板形参的名字不必相同。每个模板类型形参前面必须带上关键字 t), pename class,每个非类型形参前面必须带上类型名字。 19 【正确答案】 B 【试题解析】 由题目中函数 sW印 (a, b, 10)调用语句可知,在对函数模板 swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。 20 【正确答案】 B 【试题解析】 定义函数模板或类模板时,开头的保留字是 temDlate。 21 【正确答案】 C 【试题解析】 按照函数模板 mySwap的定义,变量 x和 y应该是同一类型,而在选项 C)的定
5、义中变量 i1和 d1属于不同的数据类型。 22 【正确答案】 B 【试题解析】 此题考查 了类模板的概念。在定义对象的过程中,系统会自动地根据需要生成相应的类定义,这种依据类模板生成具体类的过程称为类模板的实例化。 23 【正确答案】 A 【试题解析】 此题考查的是 class和 typename两个关键字。关键字 class除了能用来定义类以外还能用来声明模板的虚拟类型参数。在用作声明虚拟类型参数时typename与 class可以互换,但不能使用 t)rpename来定义类;在模板形参表中除了可以用 typename和 class声明虚拟类型参数外,还可以使用普通类型声明常规函数,故选项
6、 C错误。 24 【正确答案】 D 【试题解析】 此题考查的是模板参数。模板参数是一种参数化的数据模型,在模板类或模板函数中,只要使用数据类型的地方都能使用模板参数来代表一种未知的数据类型。所以,模板参数可以作为成员函数的局部变量类型。 25 【正确答案】 D 【试题解析】 第四个选项是定义类模板的,但是 class前面的 T是多余的。对于第二个选项,同一个类的对象相乘还是同一个类的对象,但是可能要考虑溢出的问题。 26 【正确答案】 C 【试题解析】 声明一个类模板的格式是: template。 27 【正确答案】 D 【试题解析】 在类模板中,数据类型本身成了它的参数,因而是一种参数化类型
7、的类,是类的生成器。声明一个类模板的格式是: template类声明 , 是由一个或多个模板形参组成。对于本题来说,模板形参表中包括类型 Tl和 T2两个类型参数,而在选项 D)中 T1说明其类型,而 T2没有说明其类型,与题干中的模板说明不一致。 28 【正确答案】 C 【试题解析】 p2是一个 double型的 MyTemp, p32是一个 long型 MyTemp数组,其中包括两个元素。所以共有 3个 MyTemp的实例。 29 【正确答案】 D 【试题解析】 在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例。 30 【正确答案】 D 【试题解析】 定义类模板的一般形式是: template class类名 (类声明体 ; 模板的类型参 数由关键字 class或关键字 typename及其后的标识符构成。在模板参数表中关键字 class和 typename的意义相同。