1、国家二级 C+机试(运算符重载、模板和 C+流)模拟试卷 7及答案与解析 一、选择题 1 下列关于函数模板的描述中,正确的是 ( )。 ( A)函数模板是一个实例函数 ( B)使用函数模板定义的函数没有返回类型 ( C)函数模板的类型参数与函数的参数相同 ( D)通过使用不同的类型参数,可以从函数模板得到不同的实例函数 2 有如下函数模板定义: template typename T1, Typename T2 T1 Fun(T2 n) return n*5 0; 若 要求以 int型数据 9作为函数实参调用该模板,并返回一个 double型数据,则该调用应表示为 ( )。 ( A) FUN(
2、9) ( B) FUN 9 ( C) FUN double 9 ( D) FUN 9 (double) 3 下列关于模板的描述中,错误的是 ( )。 ( A)类模板的成员函数都是模板函数 ( B)函数模板是一种参数化类型的函数 ( C)满足一定条件时可以省略模板实参 ( D)模板形参只能由关键字 typename声明 4 已知主函数中通过如下语句序列实现对函数模板 swap的调用 : int a10, b10; swap(a, b, 10); 下列对函数模板 swap的声明中,会导致上述语句序列发生编译错误的是 ( )。 ( A) template typename T void swap(T
3、 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); 5 在定义函数模板或类模板时,开头的保留字是 ( )。 ( A) typename ( B) template ( C) class ( D) typedef 6 若有函数模
4、板 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, d 1) ( D) mySwap int (i2, d2) 7 模板对类型的参数化提供了很好的支持,因此 ( )。 ( A)类模板的主要作用是生成抽象类 ( B)类模板实例化时,编译器将根据给出的模板实参生成一个类 ( C)在类模板中的数据成员都具有同样类型 ( D
5、)类模板中的成员函数都没有返回值 8 关于关键字 class和 typename,下列表述中正确的是 ( )。 ( A)程序中的 typename都可以替换为 class ( B)程序中的 class都可以替换为 typename ( C)在模板形参表中只能用 typename来声明参数的类型 ( D)在模板形参表中只能用 class或 typename来声明参数的类型 9 下列关于类模板的模板参数的叙述中,错误的是 ( )。 ( A)模板参数可以作为数据成员的类型 ( B)模板参数可以作为成员函数的返回类型 ( C)模板参数可以作为成员函数的参数类型 ( D)模板参数不 能作为成员函数的局部
6、变量的类型 10 下列模板声明中,有语法错误的是 ( )。 ( A) template typename T T fun(T x)return x; ( B) template typename T T fun(T x, int n)return x*n; ( C) template class T T fun(T*p)return*p; ( D) template class T T classAT n; ; 11 在定义一个类模板时,模板形参表是用一对括号括起来的,所 采用的括号是( )。 ( A) ( ) ( B) ( C) ( D) ) 12 有如下模板声明: template typ
7、ename T 1, typename T2 ClaSS A; 下列声明中,与上述声明不等价的是 ( )。 ( 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; 13 若 MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列 MyTemp double p2; MyTemp long p32; 编译
8、系统在处理上面的语句序列时,所生成的模板 MyTemp的实例的个数是( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 0 14 下列关于模板的叙述中,错误的是 ( )。 ( A)调用模板函数时,有时可以省略模板实参 ( B)函 数模板的每个实例就是一个函数定义 ( C)类模板的每个实例就是一个类定义 ( D)类模板的实例是一个类对象 15 下列类模板的定义中语法格式错误的是 ( )。 ( A) template class T class Buffer * ; ( B) template typename T class Buffer * ; ( C) template class
9、 T1, class T2 class Buffer * ; ( D) template T class Buffer * ; 16 下列关于 C+流的说明中,正确的是 ( )。 ( A)与键盘、屏幕、打印机和通信端口的交互都可以通过流类来实现 ( B)从流中获取数据的操作称为插入操作,向流中添加数据的操作称为提取操作 ( C) cin是一个预定义的输入流类 ( D)输出流有一个名为 open的成员函数,其作用是生成一个新的流对象 17 在语句 cin data;中, cin是 ( )。 ( A) C+的关键字 ( B)类名 ( C)对象名 ( D)函数名 18 如果利用 C+流进行输入输出,
10、下面的叙述中正确的是 ( )。 ( A)只能借助于流对象进行输入输出 ( B)只能进行格式化输入输出 ( C)只能借助于 cin和 tout进行输入输出 ( D)只能使用运算符和进行输入输出 19 下列有关 C+流的叙述中,错误的是 ( )。 ( A) C+操作符 setw设置的输出宽度永久有效 ( B) C+操作符 endl可以实现输出的回车换行 ( C)处理文件 I O时,要包含头文件 fstream ( D)进行输入操作时, eof()函数用于检测是否到达文件尾 20 在语句 “cout A: ”中, cout是 ( )。 ( A)类名 ( B)对象名 ( C)函数名 ( D) C+的关
11、键字 21 下列关于 C+流的描述中,错误的是 ( )。 ( A) cout A表达式可输出字符 A ( B) eof()函数可以检测是否到达文件尾 ( C)对磁盘文件进行流操作时,必须包含头文件 fstream ( D)以 ios base: out模式打开的文件不存在时,将自动建立一个新文件 22 在 C+中, cin是一个 ( )。 ( A)类 ( B)对象 ( C)模板 ( D)函数 23 下列关于 C+预定义 流对象的叙述中,正确的是 ( )。 ( A) cin是 C+预定义的标准输入流对象 ( B) cin是 C+预定义的标准输入流类 ( C) cout是 C+预定义的标准输入流对
12、象 ( D) cout是 C+预定义的标准输入流类 24 C+系统预定了 4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。 ( A) cout ( B) cin ( C) cerr ( D) cset 25 要利用 C+流实现输入输出的各种格式控制,必须在程序中包含的头文件是( )。 ( A) fstream ( B) istreara ( C) ostream ( D) iomanip 26 在 C+中,打开一个文件时与该文件建立联系的是 ( )。 ( A)流对象 ( B)模板 ( C)函数 ( D)类 27 下列关于输入输出流的叙述中,正确的是 ( )。 ( A)一个文件流可
13、以与一个数据文件相联系 ( B) cin是专门从键盘输入数据的输入流类 ( C)流运算符用来从输入流中读取数据 ( D)宽度设置的效果永久有效 28 在 C+中既可以用于文件输入又可以用于文件输出的流类是 ( )。 ( A) fstrearn ( B) ifstream ( C) ofstream ( D) iostream 29 对于语句 cout endl x中的各个组成部分,下列叙述中错误的是 ( )。 ( A) cout是一个输出流对象 ( B) endl“的作用是输出回车换行 ( C) x是一个变量 ( D) 称作提取运算符 国家二级 C+机试(运算符重载、模板和 C+流)模拟试卷
14、7答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 函数模板是一系列相关函数的模型 或样板,这些函数的源代码相同,只是所针对的数据类型不同。数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。 【知识模块】 模板 2 【正确答案】 C 【试题解析】 根据函数模板的定义,在选项 C的调用中,把 double类型传递给T1, int型传递给 T2。 【知识模块】 模板 3 【正确答案】 D 【试题解析】 同一模板的声明和定义中,模板形参的名字不必相同。每个模板类型形参前面必须带上关键字 typename class,每个非类型形参前面必须带上类型名字。 【知识模块】 模板 4
15、 【正确答案】 B 【试题解析】 由题目中函数 swap(a, b, 10)调用语句可知,在对函数模板 swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。 【知识模块】 模板 5 【正确答案】 B 【试题解析】 定义函数模板或类模板时,开头的保留字是 template。 【知识模块】 模板 6 【正确答案】 C 【试题解析】 按照函数模板 mySwap的定义,变量 x和 y应该是同一类型,而在选项 C的定义中变量 i1和 d1属于不同的数据 类型。 【知识模块】 模板 7 【正确答案】 B 【试题解析】 此题考查了类模板的概念。在定义对象的过程中,系统会自动地根据需要
16、生成相应的类定义,这种依据类模板生成具体类的过程称为类模板的实例化。 【知识模块】 模板 8 【正确答案】 A 【试题解析】 此题考查的是 class和 typename两个关键字。关键字 class除了能用来定义类以外还能用来声明模板的虚拟类型参数。在用作声明虚拟类型参数时typename与 class可以互换,但不能使用 typename来定义类;在模板形 参表中除了可以用 typename和 Class声明虚拟类型参数外,还可以使用普通类型声明常规函数,故选项 C错误。 【知识模块】 模板 9 【正确答案】 D 【试题解析】 此题考查的是模板参数。模板参数是一种参数化的数据模型,在模板类
17、或模板函数中,只要使用数据类型的地方都能使用模板参数来代表一种未知的数据类型。所以,模板参数可以作为成员函数的局部变量类型。 【知识模块】 模板 10 【正确答案】 D 【试题解析】 第四个选项是定义类模板的,但是 class前面的 T是多余的。对于第二 个选项,同一个类的对象相乘还是同一个类的对象,但是可能要考虑溢出的问题。 【知识模块】 模板 11 【正确答案】 C 【试题解析】 声明一个类模板的格式是: template模板形参声明类声明。 【知识模块】 模板 12 【正确答案】 D 【试题解析】 在类模板中,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。声明一个类模
18、板的格式是: template模板形参表声明类声明,模板形参表声明是由一个或多个模板形参组成。对于本题来说,模板 形参表中包括类型 T1和 T2两个类型参数,而在选项 D)中 T1说明其类型,而 T2没有说明其类型,与题干中的模板说明不一致。 【知识模块】 模板 13 【正确答案】 C 【试题解析】 p2是一个 double型的 MyTemp, p32是一个 long型 MyTemp数组,其中包括两个元素。所以共有 3个 MyTemp的实例。 【知识模块】 模板 14 【正确答案】 D 【试题解析】 在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称
19、为类模板的实 例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例。 【知识模块】 模板 15 【正确答案】 D 【试题解析】 定义类模板的一般形式是: template类型名参数名 1,类型名参数名 2, class类名 类声明体 ; 模板的类型参数由关键字 class或关键字 typename及其后的标识符构成。在模板参数表中关键字 class和 typename的意义相同。 【知识模块】 模板 16 【正确答案】 A 【试题解析】 此题考查的是 C+流的概念。从输入流中提取数据称为提取操作,把表达式插入到输出流中的操作称为插入操作,故选项 B错误; cin是一个预定义的输入流对
20、象而不是流类,故选项 C错误;输入输出流中没有 open成员函数,故选项 D错误。 【知识模块】 C+流 17 【正确答案】 C 【试题解析】 此题考查的是预定义流对象。 C+有 4个预定义的流对象: cin一标准输入; cout-一标准输出; cerr一标准出错信息输出; clog一带缓冲的标准出错信息输出。 【知识模块】 C+流 18 【正确答案】 A 【试题 解析】 此题考查的知识点是 C+流。利用 C+流既可以进行有格式输入输出,也可以进行无格式输入输出,所以选项 B错误; C+的 4个预定义的流对象为: cin一标准输入, cout一标准输出, cerr-一标准出错信息输出, clo
21、g一带缓冲的标准出错信息输出,选项 C错误; C+流除了可以使用提取 “ ”插入 “ ”进行输入输出外,还可以通过流对象的一些成员函数进行输入输出,故选项 D错误。 【知识模块】 C+流 19 【正确答案】 A 【试题解析】 此题考查的是 C+流。 C+操作符 setw()的作用 是设置输入输出宽度,且只对当前一次有效,并非永久有效,故选项 A叙述错误。 【知识模块】 C+流 20 【正确答案】 B 【试题解析】 C+有四个预定义的流对象: cin标准输, cout标准输出, cerr标准出错信息输出, clog带缓冲的标准出错信息输出。 【知识模块】 C+流 21 【正确答案】 A 【试题解
22、析】 cout是一个标准输出流对象。称之为提取运算符,它的功能是从输入流中提取数据赋值给一个变量。为插入运算符,其功能是把表达式的值插入到输出流中。当系统执行 cout x操作时,首先根据 x值的类型调用相应的插入运算符重载器函数,把 x的值传送给对应的形参,接着执行函数体,把 x的值输出到显示器屏幕上,在当前屏幕光标位置处显示出来,然后返回 ostream流,以便继续使用插入运算符输出下一个表达式的值。对于本题来说,要输出字符 A的值应该写成 cout A。因而选项 A是错误的。 【知识模块】 C+流 22 【正确答案】 B 【试题解析】 cin为 istream流类的对象。 【知识模块】
23、C+流 23 【正确答案】 A 【试题解 析】 cin为 istream流类的标准输入对象,标准输入设备就是指键盘。 【知识模块】 C+流 24 【正确答案】 D 【试题解析】 C+流有 4个预定义的流对象,它们分别是: ein标准输入: cout标准输出; cerr标准出错信息输出; clog带缓冲的标准出错信息输出。 【知识模块】 C+流 25 【正确答案】 D 【试题解析】 要使用 setw、 fixed等操作符,须包含 iomanip这个文件。 【知识模块】 C+流 26 【正确答案】 A 【试题解析】 在 C+中,打开一个文件时与该文件建立联系的是流对象。 【知识模块】 C+流 27
24、 【正确答案】 A 【试题解析】 当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的流对象,另一个是文件对象。程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。 【知识模块】 C+流 28 【正确答案】 A 【试题解析】 文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。 ifstream是文件输入流类, ofstream是文件输出流类, fstream是文件输入输出流类,当使用 cin、 cout的预定义流对象进行针对标准设备的 I O操作,则需要使用 iostream文件。 【知识模块】 C+流 29 【正确答案】 D 【试题解析】 此题考查的是 C+语言的输出流。符号 “ ”是预定义插入符,提取运算符是 “ ”。 【知识模块】 C+流