1、国家二级 C+机试(运算符重载、 C+流)模拟试卷 3及答案与解析 一、选择题 1 通过运算符重载,可以改变运算符原有的 ( )。 ( A)操作数类型 ( B)操作数个数 ( C)优先级 ( D)结合性 2 下列有关运算符重载的叙述中,正确的是 ( )。 ( A)运算符重载是多态性的一种表现 ( B) C+中可以通过运算符重载创造新的运算符 ( C) C+中所有运算符都可以作为非成员函数重载 ( D)重载运算符时可以改变基结合性 3 下列关于运算符函数的描述中,错误的是 ( )。 ( A)运算符函数的名称总是以 operator为前缀 ( B)运算符函数的参数可以是对象 ( C)运算符函数只能
2、定义为类的成员函数 ( D)在表达式中使用重载的运算符相当于调用运算符重载函数 4 下列关于运算符重载的叙述中,正确的是 ( )。 ( A)通过运算符重载机制可以为 C+语言扩充新的运算符 ( B)运算符重载的作用是使已有的运算符作用于类的对象 ( C)重载运算符的操作数类型可以全部为基本类型 ( D)所有运算符都可以被重载 5 在表达式 x+y*z中, +是作为成员函数重载的运算符, *是作 为非成员函数重载的运算符。下列叙述中正确的是 ( )。 ( A) operator+有两个参数, operator*有两个参数 ( B) operator+有两个参数, operator*有一个参数 (
3、 C) operator+有一个参数, operator*有两个参数 ( D) operator+有一个参数, operator*有一个参数 6 下面程序中对一维坐标点类 Point进行运算符重载 #include iostream using namespace std; class Point public: Point(int val)x=val; Point& operator+()x+; return *this; Point operator+(int)Point old=*this; +(*this); return old; Int GetX() constreturn x;
4、private: int x; ; int main() Point a(10); cout (+a) GetX(); cout a+ GetX(); return 0; 编译和运行情况是 ( )。 ( A)运行时输出 1011 ( B)运行时输出 1111 ( C)运行时输出 1112 ( D)编译有错 7 已知 Value是一个类, Value是 Value的一个对象。下列以非成员函数形式重载的运算符函数原形中,正确的是 ( )。 ( A) Value operator+(Value v, int i); ( B) Value operator+(Value v=value; int i)
5、; ( C) Value operator+(Value vint i=0); ( D) Value operator+(Value v=value, int i=0); 8 已知表达式 +a中的 “+”是作为成员函数重载的运算符,则与 +a等效的运算符函数调用形式为 ( )。 ( A) a operator+(1) ( B) operator+(a) ( C) operator+(a, 1) ( D) a operator+() 9 将前缀运算符 “-”重载为非成员函数,下列原型中,能正确用于类中说明的是( )。 ( A) Decr& operator-(int); ( B) Decr op
6、erator-(Decr&, int); ( C) friend Decr& operator-(Decr&); ( D) friend Decr operator-(Decr&, int); 10 若在表达式 y x中, “ “是作为成员函数重载的运算符,则该表达式还可以表示为 ( )。 ( A) x operator (y) ( B) operator (x, y) ( C) y operator (x) ( D) operator (y, x) 11 若要对类 BigNumber中重载的类型转换运算符 long进行声明,下列选 项中正确的是 ( )。 ( A) operator long
7、() const; ( B) operator long(bigNumber); ( C) long operator long() const; ( D) long operator long(BigNumber); 12 有如下类定义 class MyClass public: _ Private: int data; ; 若要为 MyClass类重载流输入运算符,使得程序中可以 “cin obj; ”形式输入 MyClass类的对象 obi,则横线处的声明语句应为 ( )。 ( A) friend istream& operator (istream& is, MyClass& a);
8、( B) friend istream& operator (istream& is, MyClass a); ( C) istream& operator (istream& is, MyClass& a); ( D) istream& operator (istream& is, MyClass a); 13 已知类 MyCiock中未 显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行: MyClock c1, c2; c2=c1+10; 由此可知:为类 MyClock重载的 “+”运算符函数的声明是 ( )。 ( A) friend MyClock operator+
9、(MyClock, int); ( B) friend MyClock operator+(MyClock, MyClock); ( C) friend MyClock operator+(int, MyClock); ( D) MyClock operator+(MyClock); 14 若要重载 +、 =、 =和口运算符,则必须作为类成员重载的运算符是( )。 ( A) +和 = ( B) =和 ( C) =和 ( D) =和 15 在语句 cin data;中, cin是 ( )。 ( A) C+的关键字 ( B)类名 ( C)对象名 ( D)函数名 16 在语句 “cout A: ”中
10、, cout是 ( )。 ( A)类名 ( B)对象名 ( C)函数名 ( D) C+的关键字 17 下列关于 C+预定义流对象的叙述中,正 确的是 ( )。 ( A) cin是 C+预定义的标准输入流对象 ( B) cin是 C+预定义的标准输入流类 ( C) cout是 C+预定义的标准输入流对象 ( D) cout是 C+q一预定义的标准输入流类 18 在 C+中,打开一个文件时与该文件建立联系的是 ( )。 ( A)流对象 ( B)模板 ( C)函数 ( D)类 19 对于语句 cout endl x;中的各个组成部分,下列叙述中错误的是 () ( A) cout是一个输出流对象 (
11、B) endl的作用是输出回车换行 ( C) x是一个 变量 ( D)称作提取运算符 20 有如下程序: #include iostream #include iomanip using namespace std; int main() cout fill(*); cout left setw(4) 123 “OK“ endl; return 0; 执行这个程序的输出结果是 ( )。 ( A) 123*OK ( B) 123*OK* ( C) *123OK ( D) *123*OK 21 使用输入输出操作符 setw,可以控 制 ( )。 ( A)输出精度 ( B)输出宽度 ( C)对齐方式
12、 ( D)填充字符 22 下列语句分别是不同程序中的第一个输入输出语句,若去掉其中的 “ left”,输出效果将发生变化的是 ( )。 ( A) cout !eft setfill(*) 357; ( B) cout left setw(5) 357; ( C) cout left setw(5) “ABCDE“; ( D) cout left “ABCDE“; 23 下列控制格式输入输出的操作符中,能够设置 浮点数精度的是 ( )。 ( A) setprecision ( B) setw ( C) setfill ( D) showpoint 24 有如下程序: #include ioman
13、ip #include iostream using namespace std; int main() cout setfill(*) setw(6) 123 456; return 0; 运行时的输出结果是 ( )。 ( A) *123*456 ( B) *123456* ( C) *123456 ( D) 123456 25 若磁盘上己存在某个文本文件,其全路径文件名为 d: ncre test txt,下列语句中不能打开该文件的是 ( )。 ( A) ifstream file(“d: ncre test txt“); ( B) ifstream file(“d: kncre test
14、 txt“); ( C) ifstream file; tile open(“d: ncre test txt“); ifstream(“d: ncre test txt“); ( D) ifstream* pFile=new 26 要利用 C+流进行文件操作,必须在程序中包含的头文件是 ( )。 ( A) iostream ( B) fstream ( C) strstream ( D) iomanip 27 当使用 ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为 ( )。 ( A) ios_base: in ( B) ios_base: in ios_base
15、: out ( C) ios_base: out ( D) ios_base: in & ios_base: out 28 下列关于文件流的描述中,正确的是 ( )。 ( A)文件流只能完成针对磁盘文件的输入和输出 ( B)建立一个文件流对象时,必须同时打开一个文件 ( C)若输入流要打开的文件不存在,将建立一个新文件 ( D)若输出流要打开的文件不存在,将建立一个新文件 29 有如下语句序列: ifstream infile(“DATA DAT“); if(infile good()cout “A“; else cout “B“; ofstream outfile(“DATA DAT“);
16、if(outfile fail()cout “C“; else cout “D“; 若执行这个语句序列显示的是 BD,则说明文件 DATA DAT( )。 ( A)以读方式打开成功 ( B)以读方式打开失败,但以写方式打开成功 ( C)以读方式打开失败,以写方式打开也失败 ( D)以读方式打开成功,以写方式打开也成功 国家二级 C+机试(运算符重载、 C+流)模拟试卷 3答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 此 题考查的是运算符重载。运算符重载具有保持其原有的操作数个数、优先级、语法结构和结合性不变的特性。故本题选项 A正确。 【知识模块】 运算符重载 2 【正确答案】
17、A 【试题解析】 此题考查的是运算符重载。 C+中运算符重载是多态性的一种表现:运算符重载是针对 C+原有运算符进行的,不可能通过重载创造出新的运算符;除了 “ ”、 “ *”、 “- *”、 “: ”、 “?: ”这五个运算符外,其它运算符都可以重载;但 “=”“”“- ”及所有的类型转换运算符只能作为成员函数重载,运算符重载不可改变其结合性 、操作数个数和优先级。 【知识模块】 运算符重载 3 【正确答案】 C 【试题解析】 C+把重载的运算符视为特殊的函数,称为运算符函数。编译系统能够依据使用运算符的不同环境,即参数 (操作数 )的数量或类型的差异,区分同一运算符的不同含义。运算符函数作
18、为非成员函数时,所有的操作数必须出现在参数表中。 【知识模块】 运算符重载 4 【正确答案】 B 【试题解析】 运算符重载就是赋予已有的运算符多重含义。通过重新定义运算符,使它能够用于特定类的对象执行特定的功能,这便增强了 C+语 言的扩充能力。运算符重载要注意以下 3点: 不能重载的运算符包括:, *, ?: 必须重载为成员函数的运算符包括 , (), -, =; 在类成员函数中重载运算符是不允许返回引用的,会出现 “返回局部变量的地址 ”警告。 【知识模块】 运算符重载 5 【正确答案】 C 【试题解析】 此题考查的是运算符的重载。运算符可重载成员函数,也可重载为友元函数。当重载为成员函数
19、时,运算符重载函数的形参个数要比运算符操作数的个数少一个;当重载为友元函数时,其参数个数应与操作数的个数相同。 【知识模块】 运算符重载 6 【正确答案】 B 【试题解析】 此题考查的是重载增 l运算符 “+”。此题中, Point operator+()重载的是前缀形式,而 Point operator+(int)重载的是后缀形式。所以主函数中第1条输出语句输出 11,此时 a x的值为 11;第 2条输出语句,首先创建了一个Point对象 old保存自身,然后通过语句 +(*this);调用前缀 +的重载函数,因为返回值是改变前保存的 old对象,故仍输出 11。 【知识模块】 运算符重载
20、 7 【正确答案】 B 【试 题解析】 此题考查的是重载加法运算符 “+”。 “+”是二元运算符,其第一操作数是对象本身, i为第二操作数,由此可知选项 B正确。 【知识模块】 运算符重载 8 【正确答案】 C 【试题解析】 本题主要是对运算符重载的考查。 “+”实现增加 1,所以除了 8之外的另一个参数默认为 1。 【知识模块】 运算符重载 9 【正确答案】 C 【试题解析】 因为要作为非成员函数重载,所以加 friend,作为前缀操作,其返回的操作结果是对该变量的引用,所以类型为 Deer&,操作数出现在参数表中,应声 明为引用,即 Deer&。 【知识模块】 运算符重载 10 【正确答案
21、】 C 【试题解析】 运算符函数的函数名是由运算符前加关键字 operator构成的。所以当 “ ”作为运算符重载后,其格式为 operator。所以其作为成员函数调用时的格式为 y operator (x)。 【知识模块】 运算符重载 11 【正确答案】 A 【试题解析】 在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。 【知识模块】 运算符重载 12 【正确答案】 A 【试题解析】 C+的输入运算符作为非类成员函数重载。在一个类中,可将输入运算符声明为友元函数,在类 MyClass重载输入运算符的形式如选项 A)所示。 【知识模块】 运算符重载 13 【
22、正确答案】 A 【试题解析】 由表达式 c2=c1+10可知,在对 “+”进行重载时,第一操作数是MyCloek类的对象,而第二操作数是一个整型数据。 【知识模块】 运算符重载 14 【正确答案】 D 【试题解析】 =、 、 ()、一以及所有的类型转换运算符只能作为成员函数 重载,而且不能是针对枚举类型操作数的重载。 【知识模块】 运算符重载 15 【正确答案】 C 【试题解析】 此题考查的是预定义流对象。 c+有 4个预定义的流对象: cin标准输入; cout标准输出; cerr标准出错信息输出: clog带缓冲的标准出错信息输出。 【知识模块】 C+流 16 【正确答案】 B 【试题解析
23、】 C+有四个预定义的流对象: cin标准输, cout标准输出, cerr标准出错信息输出, clog带缓冲的标准出错信息输出。 【知识模块】 C+流 17 【正确答案】 A 【试题解析】 cin为 istream流类的标准输入对象,标准输入设备就是指键盘。 【知识模块】 C+流 18 【正确答案】 A 【试题解析】 在 C+中,打开一个文件时与该文件建立联系的是流对象。 【知识模块】 C+流 19 【正确答案】 D 【试题解析】 此题考查的是 C+语言的输出流。符号 “ ”是预定义插入符,提取运算符是 “ ”。 【知识模块】 C+流 20 【正确答案】 A 【试题解析】 此题考查了输出流的
24、格式 控制。 cout的 fill()是设置填充字符; left和 endl分别是使输出数据左对齐和换行: setw()函数的作用是设置输入输出的宽度,此设置效果只对以此输入或输出有效。此题中,输出整数 123时宽度为 4且左对齐,得到 “123*”;输出字符串 “OK”宽度没有定义实际大小输出,结果得到OK;故最后得到的输出结果是 123*OK。 【知识模块】 C+流 21 【正确答案】 B 【试题解析】 此题考查的是 C+流的操作符。在 C+流中,操作符 setw的作用是设置输入输出宽度。 【知识模块】 C+流 22 【正确答案】 B 【试题解析】 此题考查的是 C+流。 setfill(
25、)作用是设置填充字符: left是使输出数据在指定宽度内左对齐; setw()的作用是设置输入输出宽度,且只对当前一次有效。 【知识模块】 C+流 23 【正确答案】 A 【试题解析】 setprecision(int n):设置浮点数的精度 (有效位数或小数位数 ),等价函数调用: io precision(n)。 【知识模块】 C+流 24 【正确答案】 C 【试题解析】 在主函数中 第一次输出时调用函数 setfill(*)设置填充字符为 *,调用函数 setw(6)设置每次输出的宽度为 6,所以第一次输出 123时,多余的三个空位用 *填充,即结果为 *123,第二次从输出流中输出 4
26、56。 【知识模块】 C+流 25 【正确答案】 A 【试题解析】 此题考查的是转义字符。在字符常量或字符串中,以 “ ”开头的一系列字符被看做是一个转义字符。要表示 “ ”字符,必须使用转义字符 “ ”。 【知识模块】 C+流 26 【正确答案】 B 【试题解析】 要使 用文件流对象进行针对磁盘文件的 I O操作,必须包含fstrem头文件。 【知识模块】 C+流 27 【正确答案】 A 【试题解析】 对于 ifstream,默认打开模式是 ios_base: in。 ifstream只能用于输入,它没有提供任何用于输出的操作。 【知识模块】 C+流 28 【正确答案】 D 【试题解析】 对于输入文件流类 ifstream,默认的打开模式是 ins_base: fin,当以这种方式打开文件而文件又不存在时,通过 fail()可测试打开失败 (返回值为true),对于输出文件流类 ofstream,默认的打开模式是 ios_base: out,当以这种方式打开文件而文件又不存在时,将自动建立新文件。 【知识模块】 C+流 29 【正确答案】 B 【试题解析】 由这个语句序列显示的结果是 BD,说明执行了 cout “B“和cout “D“语句。 【知识模块】 C+流