1、二级 C+-115 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.在关系代数运算中,有 5 种基本运算,它们是_。(分数:2.50)A.并()、差(-)、交()、除()和笛卡儿积()B.并()、差(-)、交()、投影()和选择()C.并()、交()、投影()、选择()和笛卡儿积()D.并()、差(-)、投影()、选择()和笛卡儿积()2.在数据库系统的组织结构中,下列_映射把用户数据库与概念数据库联系了起来。(分数:2.50)A.外模式/模式B.内模式/外模式C.模式/内模式D.内模式/模式3.下列关于线性链表的描述中,正确的是_。 、
2、只含有一个指针域来存放下一个元素地址 、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件) 、结点由两部分组成:数据域和指针域。(分数:2.50)A.仅、B.仅、C.仅、D.全部4.下面关于数据库三级模式结构的叙述中,正确的是_。(分数:2.50)A.内模式可以有多个,外模式和模式只有一个B.外模式可以有多个,内模式和模式只有一个C.内模式只有一个,模式和外模式可以有多个D.模式只有一个,外模式和内模式可以有多个5.设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结
3、果为_。(分数:2.50)A.23,13,51,57,66,26,81,69,76B.13,23,26,51,57,66,81,76,69C.23,13,51,57,26,66,81,69,76D.23,13,51,57,81,26,66,69,766.下列哪一条不属于数据库设计的任务?_(分数:2.50)A.设计数据库应用结构B.设计数据库概论结构C.设计数据库逻辑结构D.设计数据库物理结构7.数据库技术的根本目标是_。(分数:2.50)A.数据存储B.数据共享C.数据查询D.数据管理8.需求分析阶段的任务是_。(分数:2.50)A.软件开发方法B.软件开发工具C.软件开发费用D.软件系统功
4、能9.关系数据库管理系统能实现的专门关系运算包括_。(分数:2.50)A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、制表10.数据管理技术发展的三个阶段中,_没有专门的软件对数据进行管理。 人工管理阶段 文件系统阶段 数据库阶段(分数:2.50)A仅B仅C.和D.和11.阅读以下程序: #includeiostream.h void main() static int a2=5,3,1,2; int i,j,s1=0; for(i=0;i2;i+) for(j=0;j2;j+) if(i=j) s1=s1+aij; couts1endl; 则该程序的输出结果为_。
5、(分数:2.50)A.6B.7C.8D.912.若有如下程序段: #includeiostream using namespace std; int main() char*p=“abcdefgh“,*r; r=p; cout*rendl; return 0; 该程序的输出结果是_。(分数:2.50)AaBbCcDd13.有如下程序: #includeiostream using namespace std; void fun(intx=y;y=t; int main() int a2=1,2; fun(a1,a0); std:couta0“,“a1std:endl; return 0; 执行
6、后的输出结果是_。(分数:2.50)A.2,2B.1,1C.1,2D.2,114.在 C+语言中函数返回值的类型是由_决定的。(分数:2.50)A.调用该函数时系统临时B.return 语句中的表达式类型C.定义该函数时所指定的函数类型D.调用该函数时的主调函数类型15.下面程序的运行结果是_。 #includeiostream.h int x=5; int fun(int a) int c; c=x*a; return c; void main() int x=3,a=4; x=x+fun(a); cout“x=“xendl; (分数:2.50)A.x=15B.x=17C.x=23D.x=2
7、516.分析下面程序,该程序的运行结果是_。 #includeiostream.h class TestClass public: static int m; TestClass () m+; TestClass (int n) m=n; static void test() m+; ; int TestClass:m=0; void main() TestClass A; TestClass B(3); A.test(); TestClass:test(); cout“m=“B.mendl; (分数:2.50)A.m=3B.m=4C.m=5D.m=617.下列说法中错误的是_。(分数:2.5
8、0)A.公有继承时基类中的 public 成员在派生类中仍是 public 的B.公有继承时基类中的 private 成员在派生类中仍是 private 的C.私有继承时基类中的 public 成员在派生类中是 private 的D.保护继承时基类中的 public 成员在派生类中是 protected 的18.下面关于构造函数和析构函数的描述,错误的是_。(分数:2.50)A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数19.有如下程序: #includeiostream u
9、sing namespace std; class TestClass public: TestClass ()cout“BASE“; ; class TestClass1:public TestClass public: TestClass1 ()cout“DERIVED“; ; int main()TestClass1 x;return 0; 执行后的输出结果是_。(分数:2.50)A.BASEB.DERIVEDC.BASEDERIVEDD.DERIVEDBASE20.设有以下定义和程序: #includeiostream.h class TestClass1 public: void s
10、how1() cout“TestClass1“endl; ; class TestClass2:TestClass1 public: void show2() cout“TestClass2“endl; ; class TestClass3:protected TestClass2 public: void show3() cout“TestClass3“endl; ; void main() TestClass1 obj1; TestClass2 obj2; TestClass3 obj3; 则以下不合语法的调用语句是_。(分数:2.50)A.obj1.show1();B.obj2.show
11、1();C.obj3.show1();D.obj2.show2();21.下面程序段的正确输出是_。 int w=4,x=3,y=2,z=1; cout(wx?w:zy?z:x)endl;(分数:2.50)A.0B.1C.2D.322.若变量都已正确说明,则以下程序段的输出结果是_ a=2;b=3; printf(ab?“*a=%d“:“#b=%d“,a,b);(分数:2.50)A.没有正确的输出格式控制B.输出为:*a=2C.输出为:#b=2D.输出为:*a=2#b=223.若执行以下程序时从键盘上输入 9,则输出结果是_。 main() int n; cinn; if(n+10)coutn
12、endl; else coutn-endl; (分数:2.50)A.11B.10C.9D.824.以下程序的输出结果是_。 main() int a=4,b=5,c=0,d; d=!a coutdendl; (分数:2.50)A.1B.0C.非 0 的数D.-125.给出下面程序输出结果_。 #includeiostream.hvoid main() int *p1; int *p2= int b=20; p1= cout*p2endl; (分数:2.50)A.10B.20C.40D.3026.在下面的 4 个关键字中用来说明虚函数的是_。(分数:2.50)A.virtualB.publicC
13、.protectedD.private27.如果有以下定义及初始化: int a=3,*p= 则由此可以推断,*p 的值是_。(分数:2.50)A.变量 a 的值,即 3B.变量 a 的地址值C.变量 p 的地址值D.无意义28.下列字符串中,正确的 C+标识符是_。(分数:2.50)A.foo-1B.2bC.newD._25629.内部格式控制操作函数是在头文件_中定义的。(分数:2.50)A.iostream.hB.iomanip.hC.istream.hD.ostream.h30.执行语句:coutsetfill(“*“)setw(10)setfill(“#“)left123“OK“en
14、dl;return 0;后将输出_。(分数:2.50)A.123*OKB.123#OKC.123*OK*D.123#OK#31.下列对模板的声明中,正确的是_。(分数:2.50)A.templateTB.templateclass T1.T2C.templateclass T1.class T2D.templateclass T1;class T232.有如下程序: #includeiostream using namespace std; class AA int n; public: AA(int k):n(k) int get()return n; int get()constretur
15、n n+1; ; int main() AA a(5); const AA b(6); couta.get()b.get(); return 0; 执行后的输出结果是_。(分数:2.50)A.55B.57C.75D.7733.关于函数重载,下列叙述中错误的是_。(分数:2.50)A.重载函数的函数名必须相同B.重载函数必须在参数个数或类型上有所不同C.重载函数的返回值类型必须相同D.重载函数的函数体可以有所不同34.以下程序的执行结果为_。 #includeiostream.h class Sample int n; public: Sample(int i)n=i; operator+()n
16、+; /前缀重载运算符 operator+(int)n+=2; /后缀重载运算符 void disp() cout“n=“nendl; ; void main() Sample A(2),B(2); A+; +B; A.disp(); B.disp(); (分数:2.50)A.n=4n=3B.n=1n=2C.n=3n=4D.n=5n=635.重载输入流运算符“”必须使用的原型为_。(分数:2.50)A.istreamB.istreamC.istream operator(istream,类名D.类名operator(istream36.运算符函数调用格式的表达式“y/x+”与表达式“y.ope
17、rator/(operator+(x,0)”的含义相同,由此可看出_。(分数:2.50)A.“/”和“+”都是作为成员函数重载的B.“/”和“+”都是作为非成员函数重载的C.“/”是作为成员函数重载的,“+”是作为非成员函数重载的D.“/”是作为非成员函数重载的,“+”都是作为成员函数重载的37.派生类的构造函数的成员初始化列表中,不能包含_。(分数:2.50)A.基类的构造函数B.派生类中子对象的初始化C.基类中子对象的初始化D.派生类中一股数据成员的初始化38.在下面的类定义中,横线处应填入的内容是_。 class Fred public: void print()coutdataendl
18、; void setData(double d)data=d; static int count; private: double data; ; _count=0; /静态数据成员的定义(分数:2.50)A.intB.static intC.int Fred:D.static int Fred:39.下列关于 this 指针的叙述中,正确的是_。(分数:2.50)A.任何与类相关的函数都有 this 指针B.类的成员函数都有 this 指针C.类的友元函数都有 this 指针D.类的非静态成员函数才有 this 指针40.下列情况中,不会调用拷贝构造函数的是_。(分数:2.50)A.用一个对
19、象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一个对象时C.函数的形参是类的对象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时二级 C+-115 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.在关系代数运算中,有 5 种基本运算,它们是_。(分数:2.50)A.并()、差(-)、交()、除()和笛卡儿积()B.并()、差(-)、交()、投影()和选择()C.并()、交()、投影()、选择()和笛卡儿积()D.并()、差(-)、投影()、选择()和笛卡儿积() 解析:解析 并、差、笛卡儿积、投
20、影和选择是 5 种基本的运算,其他运算即交、连接和除,均可以通过 5 种基本的运算来表达。2.在数据库系统的组织结构中,下列_映射把用户数据库与概念数据库联系了起来。(分数:2.50)A.外模式/模式 B.内模式/外模式C.模式/内模式D.内模式/模式解析:解析 数据库有两层映像,即外模式/模式和模式/内模式映像。模式/内模式映像定义数据库全局逻辑结构与存储结构之间的对应关系。3.下列关于线性链表的描述中,正确的是_。 、只含有一个指针域来存放下一个元素地址 、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件) 、结点由两部分组成:数据域和指针域。(分数:2.50)A.仅、B.仅
21、、C.仅、D.全部 解析:解析 在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。 在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。4.下面关于数据库三级模式结构的叙述中,正确的是_。(分数:2.50)A.内模式可以有多个,外模式和模式只有一个B.外模式可以有多个,内模式和模式只有一个 C.内模式只有一个,模式和外模式可以有多个D.模式只有一个,外模式和内模式可以有多个解析:解析 数据库的三级模式结构是指数据库系统的外模式、模式和
22、内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。5.设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为_。(分数:2.50)A.23,13,51,57,66,26,81,69,76 B.13,23,26,51,57,66,81,76,69C.23,13,51,57,26,66,81,69,76D.23,13,51,57,81,26,66,69,76解析:解析 快速排序是起泡排序的改进。在快速排序中,任取一个记录,以它为基准用交换的方法将所有的记录分成两部分,关
23、键码值比它小的在一部分,关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。6.下列哪一条不属于数据库设计的任务?_(分数:2.50)A.设计数据库应用结构 B.设计数据库概论结构C.设计数据库逻辑结构D.设计数据库物理结构解析:解析 数据库设计工作量大而且过程复杂,既是一项数据库工程也是一项庞大的软件工程。考虑数据库及其应用系统开发全过程,将数据库设计分为以下 6 个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库的运行和维护。7.数据库技术的根本目标是_。(分数:2.50)A.数据存储B.数据共享 C.数据查询D.数据管理解析:解析 数
24、据库是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技术的根本目标是解决数据共享问题。8.需求分析阶段的任务是_。(分数:2.50)A.软件开发方法B.软件开发工具C.软件开发费用D.软件系统功能 解析:解析 需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。9.关系数据库管理系统能实现的专门关系运算包括_。(分数:2.50)A.排序、索引、统计B.选择、投影、连接 C.
25、关联、更新、排序D.显示、打印、制表解析:解析 关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。10.数据管理技术发展的三个阶段中,_没有专门的软件对数据进行管理。 人工管理阶段 文件系统阶段 数据库阶段(分数:2.50)A仅 B仅C.和D.和解析:解析 数据管理技术发展的三个阶段中,只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统,即数据库管理系统。11.阅读以下程序: #includeiostream.h void main()
26、 static int a2=5,3,1,2; int i,j,s1=0; for(i=0;i2;i+) for(j=0;j2;j+) if(i=j) s1=s1+aij; couts1endl; 则该程序的输出结果为_。(分数:2.50)A.6B.7 C.8D.9解析:解析 程序中“static int a2=5,3,1,2;”定义了一个 2*2 的整型矩阵。两个 for 循环读取数组元素。“if(i=j)”语句中的条件是取矩阵的正对角线上的元素。对角线上的元素为 5,2,所以“s1=s1+aij”的计算结果为 7。12.若有如下程序段: #includeiostream using nam
27、espace std; int main() char*p=“abcdefgh“,*r; r=p; cout*rendl; return 0; 该程序的输出结果是_。(分数:2.50)Aa BbCcDd解析:解析 字符指针 p 指向“abcdefgh”字符串,语句“r=p;”是 r 指向 p 指向的字符串,而*r 则是指向字符串中的第一个字符。即 a。13.有如下程序: #includeiostream using namespace std; void fun(intx=y;y=t; int main() int a2=1,2; fun(a1,a0); std:couta0“,“a1std:
28、endl; return 0; 执行后的输出结果是_。(分数:2.50)A.2,2B.1,1 C.1,2D.2,1解析:解析 程序中的 fun 函数的功能是实现函数中两个参数的交换。主函数中 fun 的调用中第一个参数为数组第二个值即 2,第二个参数为第一个值即 1。在 fun 的定义中第一个形参引用类型,其改变会改变主函数中实参的值;而第二个形参不是引用类型,其改变不会改变第二个实参,所以 2,1 的交换结果为 1,1,即 B。14.在 C+语言中函数返回值的类型是由_决定的。(分数:2.50)A.调用该函数时系统临时B.return 语句中的表达式类型C.定义该函数时所指定的函数类型 D.
29、调用该函数时的主调函数类型解析:解析 C+中函数 return 语句中返回的类型应与函数定义指定的类型一致,即函数定义的类型即为函数应返回的类型。15.下面程序的运行结果是_。 #includeiostream.h int x=5; int fun(int a) int c; c=x*a; return c; void main() int x=3,a=4; x=x+fun(a); cout“x=“xendl; (分数:2.50)A.x=15B.x=17C.x=23 D.x=25解析:解析 由主函数 main 入手,首先 x 被赋值为 3,a 被赋值为 4。然后调用 fun 函数,参数为 4,
30、所以在 fun 函数中的 a=4。而主程序中的 x 作用域是由它定义开始到 cout 输出,在 fun 函数中无效。而在fun 函数定义前的变量 x 作用域是整个程序,所以 fun 函数中的 x 值为 5,这样 c 的值就为 20。在主函数中的 x+fun(a)中的 x 为靠近这条语句的 x 定义,即 3,所以最后 x 的值为 20+3=23。16.分析下面程序,该程序的运行结果是_。 #includeiostream.h class TestClass public: static int m; TestClass () m+; TestClass (int n) m=n; static v
31、oid test() m+; ; int TestClass:m=0; void main() TestClass A; TestClass B(3); A.test(); TestClass:test(); cout“m=“B.mendl; (分数:2.50)A.m=3B.m=4C.m=5 D.m=6解析:解析 由主函数 main 入手,首先定义 TestClass 对象 A,B;对象 B 构造函数值为 3,构造函数中m+,所以这时 m=4。主函数中调用 A.test(),因为“static int m;”,m 被定义为类 TestClass 静态成员变量,当它的值改变后,则在各对象中这个数
32、据成员的值都同时改变了。所以这里执行“A.test();”中的 m 为前面进行加 1 操作后的 4,即 m 现在的值为 5。17.下列说法中错误的是_。(分数:2.50)A.公有继承时基类中的 public 成员在派生类中仍是 public 的B.公有继承时基类中的 private 成员在派生类中仍是 private 的 C.私有继承时基类中的 public 成员在派生类中是 private 的D.保护继承时基类中的 public 成员在派生类中是 protected 的解析:解析 公用继承时基类中的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。私有继承时,基类的公有成
33、员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有。受保护的继承时,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员认为基类私有。18.下面关于构造函数和析构函数的描述,错误的是_。(分数:2.50)A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数 解析:解析 构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联。19.有如下程序: #includeiostream usi
34、ng namespace std; class TestClass public: TestClass ()cout“BASE“; ; class TestClass1:public TestClass public: TestClass1 ()cout“DERIVED“; ; int main()TestClass1 x;return 0; 执行后的输出结果是_。(分数:2.50)A.BASEB.DERIVEDC.BASEDERIVEDD.DERIVEDBASE 解析:解析 程序中的 TestClassl 为 TestClass 的派生类,从程序中的 main 函数入手,定义了TestCla
35、ss1 对象 x。调用析构函数的顺序,先执行派生类自己的析构函数,对派生类新增加的成员进行清理,然后调用子对象的析构函数,对子对象进行清理,最后调用基类的析构函数,对基类进行清理。这里派生类中析构函数输出 DERIVED,基类析构函数输出 BASE。20.设有以下定义和程序: #includeiostream.h class TestClass1 public: void show1() cout“TestClass1“endl; ; class TestClass2:TestClass1 public: void show2() cout“TestClass2“endl; ; class T
36、estClass3:protected TestClass2 public: void show3() cout“TestClass3“endl; ; void main() TestClass1 obj1; TestClass2 obj2; TestClass3 obj3; 则以下不合语法的调用语句是_。(分数:2.50)A.obj1.show1();B.obj2.show1();C.obj3.show1(); D.obj2.show2();解析:解析 TestClass1 为 TestClass2 的私有基类,所以派生类 TestClass2 中继承过来的 show1()为私有的。Test
37、Class3 为 TestClass2 的受保护派生类。所以 TestClass3 定义的对象不能访问 TestClass中的 show1()。21.下面程序段的正确输出是_。 int w=4,x=3,y=2,z=1; cout(wx?w:zy?z:x)endl;(分数:2.50)A.0B.1 C.2D.3解析:解析 本题考查表达式作为变量进行输出,且表达式为两个三目表达式的嵌套,其中,第 1 个三目表达式 zy?z:x 的值为 1,接着计算第 2 个三目表达式 wx?w:1,值为 1。22.若变量都已正确说明,则以下程序段的输出结果是_ a=2;b=3; printf(ab?“*a=%d“:
38、“#b=%d“,a,b);(分数:2.50)A.没有正确的输出格式控制B.输出为:*a=2C.输出为:#b=2 D.输出为:*a=2#b=2解析:解析 本题实际上是考查 C 语言中的格式化输入输出知识,同时本题也考查了三目表达式的知识。如果逻辑表达式为真,则执行冒号之前的,否则执行冒号之后的表达式。23.若执行以下程序时从键盘上输入 9,则输出结果是_。 main() int n; cinn; if(n+10)coutnendl; else coutn-endl; (分数:2.50)A.11B.10 C.9D.8解析:解析 本题考查的是后置自增运算符的知识,这类题考生往往做错,主要原因是不能正
39、确拆解。题中 if 语句可以拆解为:if(910),n+1=10,cout10endl;,自增所代表的加 1 操作要紧跟在原表达式后面,而不是原语句后面。24.以下程序的输出结果是_。 main() int a=4,b=5,c=0,d; d=!a coutdendl; (分数:2.50)A.1 B.0C.非 0 的数D.-1解析:解析 本题考查逻辑运算,只要考生掌握了逻辑运算的优先级就可以正确得到答案为选项 A。或运算的优先级最高, int *p2= int b=20; p1= cout*p2endl; (分数:2.50)A.10B.20 C.40D.30解析:解析 p1 指向 b,而 p 指
40、向 p1 的地址。*p2 表示 p1 的地址,p1 的地址就是 则由此可以推断,*p 的值是_。(分数:2.50)A.变量 a 的值,即 3 B.变量 a 的地址值C.变量 p 的地址值D.无意义解析:解析 此题考查的是指针变量的定义与赋初值。语句*p=return 0;后将输出_。(分数:2.50)A.123*OKB.123#OK C.123*OK*D.123#OK#解析:解析 cout.fill()用于设置或返回输出的填充字符,默认是空格,fill()函数的设置一直有效,直到下一个 fill()函数改变该值为止。setw(int n)作用是设置输入输出的宽度,此设置只对一次输入或输出有效,
41、在完成一次数据的输入或输出后,宽度设置自动恢复为 0。注意:默认为输出数据在指定宽度内右对齐。31.下列对模板的声明中,正确的是_。(分数:2.50)A.templateTB.templateclass T1.T2C.templateclass T1.class T2 D.templateclass T1;class T2解析:解析 声明一个函数模板的格式为:template模板形参表声明函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。32.有如下程序: #includeiostream using namespace
42、std; class AA int n; public: AA(int k):n(k) int get()return n; int get()constreturn n+1; ; int main() AA a(5); const AA b(6); couta.get()b.get(); return 0; 执行后的输出结果是_。(分数:2.50)A.55B.57 C.75D.77解析:解析 语句 AA a(5)调用的是 AA(int k):n(k),a.get()调用 int get()return n;,结果会输出 5;而常对象 const AA b(6),b.get()调用的是 int
43、 get()constreturn n+1;,会输出结果 7。33.关于函数重载,下列叙述中错误的是_。(分数:2.50)A.重载函数的函数名必须相同B.重载函数必须在参数个数或类型上有所不同C.重载函数的返回值类型必须相同 D.重载函数的函数体可以有所不同解析:解析 所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。但函数的返回类型不能作为判断重载的依据。34.以下程序的执行结果为_。 #includeiostream.h class Sample int n; public: Sample(int i)n=i; operato
44、r+()n+; /前缀重载运算符 operator+(int)n+=2; /后缀重载运算符 void disp() cout“n=“nendl; ; void main() Sample A(2),B(2); A+; +B; A.disp(); B.disp(); (分数:2.50)A.n=4n=3 B.n=1n=2C.n=3n=4D.n=5n=6解析:解析 此题考查的是“+”运算符的重载。为了区分前缀和后缀运算符,规定:重载后缀运算符时必须多一个虚拟参数:int。本题中,A(2)首先给 n 赋值 2,语句 A+,调用的是后缀运算符重载语句,使得 n 加 2 变为 4。B(2)首先给 n 赋值
45、 2,然后语句+B,调用前缀运算符重载函数,使得 n 加 1。因此最终的输出结果是 n=4 n=3。35.重载输入流运算符“”必须使用的原型为_。(分数:2.50)A.istream B.istreamC.istream operator(istream,类名D.类名operator(istream解析:解析 C+流的输入运算符“”和输出运算符“”只能作为非成员函数重载。重载输入流运算符“”须使用以下原型:istream 。36.运算符函数调用格式的表达式“y/x+”与表达式“y.operator/(operator+(x,0)”的含义相同,由此可看出_。(分数:2.50)A.“/”和“+”都是作为成员函数重载的B.“/”和“+”都是作为非成员函数重载的C.“/”是作为成员函数重载的,“+”是作为非成员函数重载的 D.“/”是作为非成员函数重载的,“+”都是作为成员函数重载的解析:解析 运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即 y.operator*(z)或者 operator*(y,z);另一种是通过运算符构成表达式,即 y*z。因为“+”运算符既可以作为前缀运算符,又可以作为后缀运算符,所以重载这个运算符