1、C+全国自考试题全国2003年10月高等教育自学考试面向对象程序设计试题课程代码:02328一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.下列特性中,C与C+共有的是()A.继承B.封装C.多态性D.函数定义不能嵌套2.通常情况下,函数模板中的类型参数个数不能是()A.0B.2C.4D.33.在下列成对的表达式中,运算符“+”的意义不相同的一对是()A.5.0+2.0和5.0+2B.5.0+2.0和5+2.0C.5.0+2.0和5+2D.5+2.0和5.0+24.类的指针成员
2、的初始化是通过函数完成的,这个函数通常是()A.析构函数B.构造函数C.其它成员函数D.友元函数5.要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为()A.constchar*p=“ABCD”;B.charconst*p=“ABCD”;C.char*constp=“ABCD”;D.constchar*constp=“ABCD”;6.静态成员函数没有()A.返回值B.this指针C.指针参数D.返回类型7.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中()A.都是虚函数B.只有被重新说明时才是虚函数C.只有被重新说明为virtual时才是虚函数D.都不
3、是虚函数8.下面叙述不正确的是()A.派生类一般都用公有派生B.对基类成员的访问必须是无二义性的C.赋值兼容规则也适用于多重继承的组合D.基类的公有成员在派生类中仍然是公有的 an error occurred while processing this directive 9.在C+中实现封装是借助于()A.枚举B.类C.数组D.函数10.所有在函数中定义的变量,都是()A.全局变量B.局部变量C.静态变量D.寄存器变量二、填空题(本大题共10小题,每小题2分,共20分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。11.设函数max是由函数模板实现的,并且max(3.5,
4、5)和max(10,5)都是正确的函数调用,则该模板具有_个类型参数。12.在单继承和多继承方式中,面向对象的程序设计应尽量使用_继承。13.语句序列ifstreamdatafile;datafile.“data.dat”);的功能可用一个语句实现,这个语句是_。14.将关键字const写在函数头之后,函数体之前,说明该函数是一个const成员函数。此时const不是指定函数的返回值,而是修饰_指针。15.一个抽象类的派生类可以实例化的必要条件是实现了所有的_。16.在C+中,虚函数帮助实现了类的_性。17.通过C+语言中类的_,可以扩充和完善已有类以适应新的需求。18.为了在对象生存期结束时
5、释放其指针成员所指向的动态存储空间,通常需要为该类定义_。19.在联合中,所有数据成员具有_的地址,任一时刻只有_个数据成员有效。20.在已经定义了整型指针ip后,为了得到一个包括10个整数的数组并由ip所指向,应使用语句_。三、改错题(本大题共5小题,每小题2分,共10分)21.下面的类定义有一处错误,请用下横线标出错误所在行并改正错误。classAinta;public;A(intaa):a=aa;22.下面的程序先把字符串“Lookout!”输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为Lookout!。程序中有一处错误,请用下横线标出错误所在行,并给出更改意见。#in
6、cludevoidmain()ofstreamoutf(“D:tem.dat”,ios:trunc);outfk;countk;inf.close();23.下面的程序有一处错误,请用下横线标出错误所在行并改正错误。#includeclassTestpublic;staticintx;intx=20;/对类成员初始化voidmain()coutTest:x;24.下面的程序类B的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。#include#includeclassApublic:A(constchar*nm)strcpy(name,nm);private:charname80;c
7、lassB:publicApublic:B(constchar*nm):A(nm)voidPrintName()const;voidB:PrintName()constcout“name:”nameendl;voidmain()Bb1(“wangli”);b1.PrintName();25.用下横线标出下面程序main函数中的错误所在行,并说明错误原因。#includeclassLocationprivate:intX,Y;public;voidinit(intinitX,intinitY);intsumXY();voidLocation:init(intinitX,intinitY)X=in
8、itX;Y=initY;intLocation:sumXY()returnX+Y;voidmain()LocationA1;intx,y;A1.init(5,3);x=A1.X;y=A1.Y;coutx+y”A1.sumXY()endl;四、完成程序题(本大题共5小题,每小题4分,共20分)。根据题目要求,完成程序填空。26.在下面程序横线处填上适当内容,以使该程序执行结果为:1288#includetemplateclassTanypublic:;voidpr()if(sizeof(int)=)county?x:y)endl;elsecouty?y:x)endl;voidmain()Tany
9、dobj=12.0,88.0;dobj.pr();Tanyiobj=12,88;iobj.pr();27.在下面的横线处填上适当内容,使程序完整。#include#includeclasslocprivate:floatx,y;public;loc()x=x1;y=y1;floatgetx()returnx;floatgety()returny;floatdis(loc&,loc&);floatloc:dis(loc&a,loc&b)flostdx=a.x-b.x;flostdy=a.y-b.y;returnsqrt(dx*dx+dy*dy);voidmain()locpl(3.5,4.5),
10、p2(5.5,6.5);floatd=loc:dis(p1,p2);cout“Thedistanceis”d;28.在下面程序中的横线处填上适当内容,使程序完整。#includeclassvehicleprotected:intsize;intspeed;public;voidsetSpeed(ints)speed=s;getSpeedLevel()returnspeed/10;classcar:publicvehiclepublic:intgetSpeedLeve()returnspeed/5;classtruck:publicvehiclepublic:intgetspeedLevel()
11、returnspeed/15;intmaxSpeedLevel(vehicle,vehicle)if(v1.getSpeedLevel()v2.getSpeedLevel()return1;elsereutrn2;voidmain()turckt;carc;t.setSpeed(130);c.setSpeed(60);coutmaxSpeedLevel(t,c)endl;/此结果输出为229.在下面横线处填上合适内容,完成类B的定义。#includeclassApublic:A()a=0;A(inti)a=i;voidprint()couta”,”;private:inta;classB:pu
12、blicApublic:B()b1=b2=0B()b1=i;b2=0;B(inti,intj,intk):b1=j;b2=k;/使a的值为ivoidprint()A:print();coutb1”,”b2endl;private:intb1,b2;30.根据注释在空白处填写适当内容。classLocationprivate:intX,Y;public:voidinit(intinitX,intinitY);intGetX();intGetY();voidLocation:init(intinitX,intinitY)X=initX;Y=initY;intLocation:GetX()reutr
13、nX;intLocation:GetY()reutrnY;#includevoidmain()LocationA1;A1.init(20,90);/定义一个指向A1的引用rA1/用rA1在屏幕上输出对象A1的数据成员X和Y的值五、程序分析题(本大题共6小题,每小题5分,共30分)给出下面各程序的输出结果。31.写出下面程序的输出结果:#includeclassFunArrayint*pa;/指向一个数组空间intsize;/数组元素个数public:FunArray(inta,intthesize):pa(a),size(thesize)intSize()returnsize;int&oper
14、ator(intindex)returnpaindex-1;voidmain()ints=3,7,2,1,5,4;FunArrayma(s,sizeof(s)/sizeof(int);ma3=9;for(inti=1;i=ma.Size();i+)coutmai,;32.写出下面程序的输出结果:#includetemplateclassTclassTx,y;public:Tclass(Ta,Tb):x(a)y=b;Tclass(Ta)y=(T)0,x=a;voidpr()charc;c=(y=(T)0?+:-);coutxc(T)0?y:-y)iendl;voidmain()Tclassa(1
15、0.5,-5.8);a.pr();Tclassb(10);b.pr();33.写出下面程序的输出结果:#includeclassTestprivate:staticintval;inta;public;staticintfunc();voidsfunc(Test&r);intTest:val=200;intTest:func()returnval+;voidTest:sfunc(Test&r)r.a=125;coutResult3=r.a;voidmain()cout”Result1=”Test:func()endl;Testa;cout”Result2=”a.func();a.sfunc(a
16、);34.写出下面程序的输出结果:#includeclassApublic;virtualvoidprint()cout”ThisisclassAprinting.”endl;classB:publicApublic:voidprint();classC:publicBpublic:voidprint()cout“ThisisclassCprinting.”endl;voidshow(A&a)a.print();voidmain()Aa;Bb;Cc;show(a);show(b);show(c);35.写出下面程序的输出结果:#includeclassApublic:A()a=0;A(inti
17、)a=i;voidPrint()couta”,”;intGeta()returna;private:inta;classB:publicApublic:B()b=0;B(inti,intj,intk);voidPrint();private:intb;Aaa;B:B(inti,intj,intk):A(i),aa(j)b=k;voidB:Print()A:Print();coutb”,”aa.Geta()endl;voidmain()Bbb2;bb0=B(1,2,5);bb1=B(3,4,7);for(inti=0;i2;i+)bbi.Print();36.写出下面程序的输出结果:#includeclassLocationintX,Y;public:voidinit(int=0,int=0);voidvalueX(intval)X=val;intvalueX()returnX;voidvalueY(intval)Y=val;intvalueY()returnY;voidLocation:init(intinitX,intinitY)X=initX;Y=initY;voidmain()LocationA,B;A.init();coutA.valueX()endl;A.valueX