1、国家二级(C+)机试模拟试卷 163 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是( )。(分数:2.00)A.12345ABCDEB.EDCBA54321C.ABCDE12345D.54321EDCBA2.下列叙述中正确的是( )。(分数:2.00)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的
2、动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定3.在长度为 n 的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。(分数:2.00)A.O(n)B.O(n 2 )C.O(log 2 n)D.O(nlog 2 n)4.下列叙述中正确的是( )。(分数:2.00)A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C.顺序存储结构能存储有序表,链式存储结构不能存储有序表D.链式存储结构比顺序存储结构节省存储空间5.数据流图中带有箭头的线段表示的是( )。(分数:2.00)A.控制流B.事
3、件驱动C.模块调用D.数据流6.在软件开发中,需求分析阶段可以使用的工具是( )。(分数:2.00)A.NS 图B.DFD 图C.PAD 图D.程序流程图7.在面向对象方法中,不属于“对象”基本特点的是( )。(分数:2.00)A.一致性B.分类性C.多态性D.标识唯一性8.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。(分数:2.00)A.一对一B.一对多C.多对一D.多对多9.在数据管理技术发展的三个阶段中,数据共享最好的是( )。(分数:2.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段D.三个阶段相同10.有三个关系 R、S 和 T 如下: (分数:2.00)A.
4、笛卡尔积B.交C.并D.自然连接11.下列语句中,错误的是( )。(分数:2.00)A.const int buffer=256;B.const double *point;C.int const buffer=256;D.double * const point;12.if 语句的语法格式可描述为:格式 1:if(条件)语句或格式 2:if(条件)语句1else语句 2关于上面的语法格式,下列表述中错误的是( )。(分数:2.00)A.条件部分可以是一个 if 语句,例如 if(if(a=0)B.语句部分可以是一个 if 语句,例如 if()if()C.如果在条件前加上逻辑非运算符!并交换语
5、句 1和语句 2的位置,语句功能不变D.语句部分可以是一个循环语句,例如 if()while()13.有如下说明:int a,101=1,2,3,4,5,6,7,8,9,10,*p=a;则数值为 9 的表达式是( )。(分数:2.00)A.*p+9B.*(p+8)C.*p+=9D.p+814.有如下程序段:int i=0,j=1;int &r=i;r=j;int *p=&i:*p=&r;其中会产生编译错误的语句是( )。(分数:2.00)A.B.C.D.15.下列字符串中,不可以用做 C+标识符的是( )。(分数:2.00)A.y_2006B._TEST_HC.RetumD.switch16.
6、为了取代 C 中带参数的宏,在 C+中使用( )。(分数:2.00)A.重载函数B.内联函数C.递归函数D.友元函数17.通过运算符重载,可以改变运算符原有的( )。(分数:2.00)A.操作数类型B.操作数个数C.优先级D.结合性18.在函数中,可以用 auto、extern、register 和 static 这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是( )。(分数:2.00)A.autoB.extemC.registerD.static19.下列运算符函数中肯定不属于类 FunNumber 的成员函数的是( )。(分数:2.00)A.int oper
7、ator-(FunNumber);B.FunNumber operator-();C.FunNumber operator-(int);D.int operator-(FunNumber,FunNumber);20.若有下面的函数调用:fun(a+b,3,max(n-1,b)则 fun 的实参个数是( )。(分数:2.00)A.3B.4C.5D.621.关于运算符重载,下列表述中正确的是( )。(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建 C+中原来没有的运算符22.
8、有如下程序:#includiostreamusing namespace std;int main()void function(double val);double val;function(val);coutval;return0;void function(double val)val=3;编译运行这个程序将出现的情况是( )。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:30D.输出一个不确定的数23.下列情况中,不会调用拷贝构造函数的是( )。(分数:2.00)A.用一个对象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一个对象时C.函数的形参是类的对
9、象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时24.以下关键字不能用来声明类的访问权限的是( )。(分数:2.00)A.publicB.staticC.protectedD.private25.由于常对象不能被更新,因此( )。(分数:2.00)A.通过常对象只能调用它的常成员函数B.通过常对象只能调用静态成员函数C.常对象的成员都是常成员D.通过常对象可以调用任何不改变对象值的成员函数26.下列有关继承和派生的叙述中,正确的是( )。(分数:2.00)A.如果一个派生类公有继承其基类,则该派生类对象可以访问基类的保护成员B.派生类的成员函数可以访问基类的所有成
10、员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类27.在公有继承的情况下,允许派生类直接访问的基类成员包括( )。(分数:2.00)A.公有成员B.公有成员和保护成员C.公有成员、保护成员和私有成员D.保护成员28.有如下程序:#ncludeiostreamusing namespace std;class Basepublic:void fun()cout“Base:fun“endl;class Derived:public Basepublic:void fun()_cout“Derived:fun“endl;int main()Deriv
11、ed d;dfun();return0;已知其执行后的输出结果为:Base:funDerived:fun 则程序中下画线处应填入的语句是( )。(分数:2.00)A.Basefun();B.Base:fun();C.Base-fun();D.fun();29.有如下程序:#includeiostreamusing namespace std;class MyClasspublic:MyClass()coutA;MyClass(char c)coutc;MyClass()coutB;int main()MyClass p1,*p2;p2=new MyClass(X);delete p2;retu
12、rn0;执行这个程序的输出结果是( )。(分数:2.00)A.ABXB.ABXBC.AXBD.AXBB30.有如下程序:#includeiostreamusing namespace std;int i=1;class Funpublic:static int i;int value()return i-1;int value()constreturn i+1;int Fun:i=2;int main()int i=3;Fun fun1;const Fun fun2;_return0;若程序的输出结果是:123 则程序中下画线处遗漏的语句是( )。(分数:2.00)A.coutfun1valu
13、e()Fun:ifun2value();B.coutFun:ifun1value()fun2value();C.coutfun1value()fun2value()Fun:i;D.coutfun2value()Fun:ifun1value();31.有如下程序:#includeiostreamusing namespace std;class Objstatic int i;public:obj()i+;obj()i-;static int getVal()return i;int obj:i=0;void f()obj ob2;coutob2getVal();int main()obj ob
14、1;f();obj *ob3=new obj;coutob3-getVal();delete oh3;coutobj:getVal();return0;执行这个程序的输出结果是( )。(分数:2.00)A.232B.231C.222D.22132.有如下程序:#includeiostreamusing namespace std;class Pairint m,n;public:Pair(int j,int k):m(j),n(k)int get()return m;int get()constreturn m+n;int main()Pair a(3,5);const Pair b(3,5)
15、;coutaget()bget();return0;执行这个程序的输出结果是( )。(分数:2.00)A.33B.38C.83D.8833.有如下程序:#includeiostreamusing namespace std;class Baseprotected:Base()coutA;Base(ehar c)coutc;class Derived:public Basepublic:Derived(char c)coutc;int main()Derived d1(B);return0;执行这个程序的输出结果是( )。(分数:2.00)A.BB.BAC.ABD.BB34.有如下类定义:cla
16、ss MyBaseint k;public:NyBase(int n=0):k(n)int value()coastreturn k;class MyDefived:NyBaseint j;public:MyDefived(int i):j(i)int getK()constreturn k;int getJ()constreturn j;编译时发现有一处语法错误,对这个错误最准确的描述是( )。(分数:2.00)A.函数 getK 试图访问基类的私有成员变量 kB.在类 MyDerived 的定义中,基类名 NyBase 前缺少关键字 public、protected 或 privateC.
17、类 MyDefived 缺少一个无参的构造函数D.类 MyDerived 的构造函数没有对基类数据成员 k 进行初始化35.有如下程序:#includeiostreamusing namespace std;class Instrumentpublic:virtual void Display()=0;class Piano:public Instrumentnublic:void Display()*函数体略*;int main()Instrument s;Instrument *p=0:;return0;下列叙述中正确的是( )。(分数:2.00)A.语句“Insturment*p=0;”
18、编译时出错B.语句“Instrument s;”编译时出错C.类 Piano 中的 Display 函数不是虚函数D.类 Instrument 是一个虚基类36.有如下程序:#includeiostreamusing namespace std;class Apublic:virtual void func1()cout“A1“;void rune2()cout“A2“;class B:public Apublic:void func1()cout“B1“;void func2()cout“B2“;int main()A*p=new B:p-func1();p-func2();delete p
19、;return0;执行这个程序的输出结果是( )。(分数:2.00)A.B1B2B.A1A2C.B1A2D.A1B237.关于在调用模板函数时模板实参的使用,下列表述中正确的是( )。(分数:2.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略38.关于关键字 class 和 typename,下列表述中正确的是( )。(分数:2.00)A.程序中的
20、 typename 都可以替换为 classB.程序中的 class 都可以替换为 typenameC.在模板形参表中只能用 typename 来声明参数的类型D.在模板形参表中只能用 class 或 typename 来声明参数的类型39.在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是( )。(分数:2.00)A.ios_base:curB.ios_base:begC.ios_base:outD.ios_base:end40.下列关于 C+流的描述中,错误的是( )。(分数:2.00)A.coutA表达式可输出字符 AB.eof()函数可以检测是否到达文件尾C.对磁盘文件进行流
21、操作时,必须包含头文件 fstreamD.以 ios_base:out 模式打开的文件不存在时,将自动建立一个新文件二、基本操作题(总题数:1,分数:2.00)41.使用 VC6 打开考生文件夹 proj1 下的工程 proj1,其中有“沙发”类 Sofa 和主函数 main 的定义。程序中位于每个ERROR*found*下的语句行有错误请加以更正。更正后程序的输出应该是:座位数:3 颜色:红色注意:只能修改每个ERROR*found*下的那一行,不要改动程序中的其他内容。#includeiostreamusing namespace std;class Sofa“沙发”类 int seats
22、;座位数 char color10;颜色public:ERROR*found*Sofa(int s,const char*co)ERROR*found*if(co=NULLlcolor0=0;elsestrcpy(color,co);EllROR*found*const char*getSeats()(!onstreturn seats;coust char*getColor()constreturn color;int main()Sofa sara(3);tout“座位数:“saragetSeats()endl;tout“颜色:“safagetColor()endl;retturn0;(分
23、数:2.00)_三、简单应用题(总题数:1,分数:2.00)42.请使用 VC6 或使用【答题】菜单打开考生文件夹 proj2 下的工程 proj2,该工程中包含一个程序文件maincpp,其中有日期类 Date、人员类 Person 及排序函数 sortByName 和主函数 main 的定义。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为:按姓名排序排序前:张三男出生日期:1978 年 4 月 20 日王五女出牛日期:1965 年 8 月 3 日杨六女出生日期:1965 年 9 月 5 日李四男出生日期:1973 年 5 月 30 日排序后
24、:李四男出生日期:1973 年 5 月 30 日王五女出生日期:1965 年 8 月 3 日杨六女出生日期:1965 年 9 月 5 日张三男出生日期:1978 年 4 月 20 日注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。#includeiostreamusing namespace std;class Date日期类 int year,month,day;年、月、日 public:Date(int year,int month,int day):year(year),month(month),day(day)int getYear()c
25、onstreturn year;int getMonth()constreturn month;int getDay()constreturn day;class Person人员类 char name14;姓名 bool is_male;性别,为 true 时表示男性 Date birth_date;出生日期public:Person(char*name,bool is_male,Date birth_date)*found*:_strcpy(this-name,name);const char*getName()constreturn name;bool isMale()constretu
26、rn is_male;Date getBirthdate()constreturn birth_date;利用 strcmp()函数比较姓名,返回一个正数、0 或负数,分别表示大于、等于、小于 int compareName(const Person &p)const*found*_void show()coutendl:coutname“(is_male?“男“:“女“)“出生日期:“birth_dategetYear()“年“显示出生年*found*_显示出生月birth_dategetDay()“日“;显示出生日;void sortByName(Person ps,int size)将人
27、员数组按姓名排列为升序for(int i=0;isize-1;i+)采用选择排序算法 int m=i;for(int j=i+1;jsize;j+)if(psjcompareName(psm)0)m=j;if(mi)Person p=psm;psm=psi;psi=p;int main()Person staff=Person(“张三“,true,Date(1978,4,20),Person(“王五“,false,Date(1965,8,3),Person(“杨六“,false,Date(1965,9,5),Person(“李四“,true,Date(1973,5,30);const int
28、size=sizeof(staff)sizeof(staff0);int i;coutendl“按姓名排序“;coutendl“排序前:“;for(i=0;isize;i+)staffishow();sortByName(staff,size);coutendlendl“排序后:“;for(i=0;isize;i+)staffishow();coutendl;return0;(分数:2.00)_四、综合应用题(总题数:1,分数:2.00)43.请使用 VC6 或使用【答题】菜单打开考生文件夹 proj3 下的工程 proj3,其中声明的 DataList 类,是一个用于表示数据表的类。sort
29、 成员函数的功能是将当前数据表中的元素升序排列。请编写这个 sort 函数。程序的正确输出应为:排序前:7,1,3,11,6,9,12,10,8,4,5,2 排序后:1,2,3,4,5,6,7,8,9,10,11,12 要求:补充编制的内容写在“*333*”与“*666*”两行之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件 outdat 中。输出函数 writeToFile 已经编译为 obj 文件,并且在本程序调用。DataListh#includeiostreamusing namespace std;class DataList数据表类 int len;double*d;p
30、ublic:DataList(int len,double data=NULL);DataList()deleted;int length()constreturn len;数据表长度(即数据元素的个数)double getElement(int i)constreturn di;void sort();数据表排序 void show()const;显示数据表;void writeToFile(char*,const DataList&);maincpp#include“DataListh“DataList:DataList(int len,double data):len(len)d=new
31、 doublelen;for(int i=0;ilen;i+)di=(data=NULL?00:datai);void DataList:sort()数据表排序*333*666*void DataList:show()const显示数据表 for(int i=0;ilen-1;i+)coutdi“,“;coutdlen-1endl;int main()double s=7,1,3,11,6,9,12,10,8,4,5,2;DataList list(12,s);cout“排序前:“;listshow();listsort();coutendl“排序后:“;listshow();writeToF
32、ile(“ “,list);return0;(分数:2.00)_国家二级(C+)机试模拟试卷 163 答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是( )。(分数:2.00)A.12345ABCDEB.EDCBA54321 C.ABCDE12345D.54321EDCBA解析:解析:栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择 B。2.下列叙述中正确的是( )。(分数:2.00)A.循环队列有队头和队尾两个指针,
33、因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定 解析:解析:循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以 A 错误;在循环队列中需要队头指针与队尾指针来共同反映队列中元素的动态变化情况,所以 B 与 C 错误。3.在长度为 n 的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。(分数:2.00)A.O(n)B.O(n 2 )C.O(log 2 n) D.O(nlog 2 n)解析:解析:当有序线性表为顺序
34、存储时才能用二分法查找。可以证明的是对于长度为 n 的有序线性表,在最坏情况下,二分法查找只需要比较 log 2 n 次,而顺序查找需要比较 n 次。4.下列叙述中正确的是( )。(分数:2.00)A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C.顺序存储结构能存储有序表,链式存储结构不能存储有序表D.链式存储结构比顺序存储结构节省存储空间解析:解析:链式存储结构既可以针对线性结构也可以针对非线性结构,所以 B 与 C 错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以 D 错误
35、。5.数据流图中带有箭头的线段表示的是( )。(分数:2.00)A.控制流B.事件驱动C.模块调用D.数据流 解析:解析:数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。6.在软件开发中,需求分析阶段可以使用的工具是( )。(分数:2.00)A.NS 图B.DFD 图 C.PAD 图D.程序流程图解析:解析:在需求分析阶段可以使用的工具有数据流图 DFD 图,数据字典 DD,判定树与判定表,所以选择 B。7.在面向对象方法中,不属于“对象”基本特点的是( )。(分数:2.00)A.一致性 B.分类性C.多态性D.标识唯一性解析:解析:对象有如下一些基本
36、特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A。8.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。(分数:2.00)A.一对一B.一对多 C.多对一D.多对多解析:解析:因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。9.在数据管理技术发展的三个阶段中,数据共享最好的是( )。(分数:2.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段 D.三个阶段相同解析:解析:数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物
37、理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择 C。10.有三个关系 R、S 和 T 如下: (分数:2.00)A.笛卡尔积B.交C.并D.自然连接 解析:解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据 T 关系中的有序组可知 R 与 S 进行的是自然连接操作。11.下列语句中,错误的是( )。(分数:2.00)A.const int buffer=256;B.const double *point;C.int const buffer=256;D.double * const point;
38、解析:解析:const 是一个 C+关键字,用于限定不允许改变的变量。选项 B 是指向常量的指针,定义时可以不初始化;选项 D 是指针常量,定义时必须初始化。故答案为 D。12.if 语句的语法格式可描述为:格式 1:if(条件)语句或格式 2:if(条件)语句1else语句 2关于上面的语法格式,下列表述中错误的是( )。(分数:2.00)A.条件部分可以是一个 if 语句,例如 if(if(a=0) B.语句部分可以是一个 if 语句,例如 if()if()C.如果在条件前加上逻辑非运算符!并交换语句 1和语句 2的位置,语句功能不变D.语句部分可以是一个循环语句,例如 if()while
39、()解析:解析:本题考查 if 语句,if 语句的条件部分不能嵌套 if 语句,所以 A 选项错误;B 选项就是 if语句嵌套;C 选项其实就是将判断条件颠倒,然后执行语句也颠倒,所以效果一样;D 选项也正确。13.有如下说明:int a,101=1,2,3,4,5,6,7,8,9,10,*p=a;则数值为 9 的表达式是( )。(分数:2.00)A.*p+9B.*(p+8) C.*p+=9D.p+8解析:解析:本题考查指向数组的指针,本题中指针变量 p 指向数组 a,那么水 p 的值就是 1,即表示数组的第一个元素,那么数值为 9 的表达式就是将指针向后移动 8 个地址,即 p+8 指向的是
40、数组元素值为9,所以数值为 9 的表达式是水(p+8)。14.有如下程序段:int i=0,j=1;int &r=i;r=j;int *p=&i:*p=&r;其中会产生编译错误的语句是( )。(分数:2.00)A. B.C.D.解析:解析:本题考查指针和引用。为引用,使用正确;中&r 表示一个地址,而*p 已经是一个值了,不能将一个指针赋值给一个值,所以编译错误。15.下列字符串中,不可以用做 C+标识符的是( )。(分数:2.00)A.y_2006B._TEST_HC.RetumD.switch 解析:解析:本题考查 C+标识符的命名规则,其规则有以下几点: 所自标识符必须由字母、数字或下画
41、线组成,且必须由字母或下画线开头; 所有标识符不能使用 C+已有的关键字; 大、小写字母表示不同意义,即代表不同的标识符。选项 C 中虽然 return 是关键字,但因首字母大、小写不同,也可用于标识符,但不建议使用。故答案为 D。16.为了取代 C 中带参数的宏,在 C+中使用( )。(分数:2.00)A.重载函数B.内联函数 C.递归函数D.友元函数解析:解析:一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,即类似于宏。17.通过运算符重载,可以改变运算符原有的( )。(分数:2.00)A.操作数类型 B
42、.操作数个数C.优先级D.结合性解析:解析:重载运算符的规则如下: C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5 个; 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。故本题答案为 A。18.在函数中,可以用 auto、extern、register 和 static 这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是( )。(分数:2.0
43、0)A.auto B.extemC.registerD.static解析:解析:变量的存储方法分为静态存储和动态存储两大类,包含 4 种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extem)。变量如果没有说明存储类型,那么默认就是 auto。19.下列运算符函数中肯定不属于类 FunNumber 的成员函数的是( )。(分数:2.00)A.int operator-(FunNumber);B.FunNumber operator-();C.FunNumber operator-(int);D.int operator-(FunNumber,FunNum
44、ber); 解析:解析:本题考查运算符重载的一些规则: 一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数; 双目运算符=、()、-不能重载为类的友元函数; 类型转换函数只能定义为一个类的成员函数,而不能定义为类的友元函数; 若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好; 若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数; 当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用);如果左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算
45、符函数必须作为一个友元函数来实现。所以答案为 D。20.若有下面的函数调用:fun(a+b,3,max(n-1,b)则 fun 的实参个数是( )。(分数:2.00)A.3 B.4C.5D.6解析:解析:本题考查函数实参个数的基础知识,根据实参的概念,(a+b)、3、max(n-1,b)分别为其中的 3 个实参。故答案为 A。21.关于运算符重载,下列表述中正确的是( )。(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型 D.可以通过运算符重载来创建 C+中原来没有的运算符解析:解析:重载运算符的规则如下: C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5 个; 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。故本题答案为 C。22.有如下程序:#includiostreamu