您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 00710月《面向对象程序设计》试题-及答案
1全国2007年10月高等教育自学考试面向对象程序设计试题课程代码:02328一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.以下说法中正确的是()A.C++程序总是从第一个定义的函数开始执行B.C++程序总是从main函数开始执行C.C++函数必须有返回值,否则不能使用函数D.C++程序中有调用关系的所有函数必须放在同一个程序文件中2.以下关于函数模板叙述正确的是()A.函数模板也是一个具体类型的函数B.函数模板的类型参数与函数的参数是同一个概念C.通过使用不同的类型参数,函数模板可以生成不同类型的函数D.用函数模板定义的函数没有类型3.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符4.构造函数不具备的特征是()A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明5.在C++中,封装是借助什么达到的()A.结构B.数组C.类D.函数6.在哪种情况下适宜采用inline定义内联函数?()A.函数体含有循环语句B.函数体含有递归语句C.函数代码少、频繁调用D.函数代码多、不常调用7.在关键字public后面定义的成员为类的()A.私有成员B.公用成员2C.保护成员D.任何成员8.以下哪个基类中的成员函数表示纯虚函数?()A.virtualvoidtt()=0B.voidtt(int)=0C.virtualvoidtt(int)D.virtualvoidtt(int){}9.假定AA是一个类,“AA*abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值()A.已经被改变B.可能被改变C.不变D.受到函数调用的影响10.C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是()A.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C.规定函数说明符必须用原型D.引进了类和对象的概念二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。11.如果一个派生类只有一个唯一的基类,则这样的继承关系称为____________。12.C++支持两种多态性:____________时的多态性和运行时的多态性。13.若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式直接继承它。14.所有模板都以template关键字和一个____________表开头。15.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的____________语句。16.类型转换函数没有返回值类型,而且参数表为____________。17.C++提供的预处理命令有嵌入指令,条件编译指令和____________。18.对象将其大部分实现细节隐藏起来,这种机制称为____________。19.定义类动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。20.在函数体之前加____________关键字可以防止覆盖函数改变数据成员的值。三、改错题(本大题共2小题,每小题6分,共12分)21.下面是分数类fract的定义及测试主程序,在类定义及其友元函数定义中1到6行中有三处错误,更正错误后程序应显示41/28,请指出错误所在行的行号并给出改正意见。classfract{intden;//分子intnum;//分母public3//1行fract(intd=0,intn=1):den(d),num(n){}//2行friendfract&operator+=(fract,fract&);//3行voidshow(){coutden’/’num;}//4行};//5行friendfract&operator+=(fractf1,fractf2)//6行{//7行f1.den=f1.den*f2.num+f1.num*f2.den;//8行f1.num*=f2.num;//9行returnf1;//10行}voidmain(){fractfr(3,4);fr+=fract(5,7);fr.show();}错误行的行号为____________、____________和____________。4分别改正为____________、____________和____________。22.下面程序段第13-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。classA{//1行inta;//2行public://3行A(intaa=0):a(aa){}//4行};//5行classB{//6行inta,b;//7行constintc;//8行Ad;//9行public://10行B():c(0){a=b=0;}//11行B(intaa,intbb):d(aa+bb){//12行a=aa;b=bb;c=aa-bb;//13行}//14行}//15行Ba,b(1,2);//16行Bx=a,y(b),z(1,2,3);//17行错误行的行号为____________、____________和____________。错误原因分别为____________、____________和____________。四、程序填空题(本大题共3小题,每小题6分,共18分)请按提示要求完成以下程序段的填空。23.在下面一段类定义中,Derived类是由直接基类Base1和Base2所派生的,Derived类包含有两个间接基类BaseBase,在初始化函数Init中,需要把x1和x2的值分别赋给属于基类Base1的x5成员和属于基类Base2的x成员。classBaseBase{protected:intx;public:BaseBase(){x=1;}};classBase1:publicBaseBase{public:Base1(){}};classBase2:publicBaseBase{public:Base2(){}};classDerived:____________(1)____________{public:Derived(){}voidInit(intx1,intx2){____________(2)____________;____________(3)____________;6}voidoutput(){coutBase1::x’’Base2::xendl;}};(1)(2)(3)24.#includeiostream.h#includestdliB.hclassA{int*a;intn;intMaxLen;public:A():a(0),n(0),MaxLen(0){}A(int*aa,intnn,intMM){n=nn;MaxLen=MM;if(nMaxLen)exit(1);a=newint[MaxLen];____________(4)____________;//以i为循环变量把aa数组中每个元素值//传送给a数组的对应元素中}~A();intGetValue(inti){returna[i];}//函数体返回a[i]的值};7____________(5)____________//析构函数的类外定义voidmain(){intb[10]={1,2,3,4,5,6,7,8,9,10};Ar(b,10,10);inti,s=0;____________(6)____________;//以i为循环变量,把r对象的a数据成员中的//每个元素值依次累加到s中couts=sendl;}(4)(5)(6)25.下面是一维数组类ARRAY的定义,ARRAY与普通一维数组区别是:(1)用()而不是[]进行下标访问,(2)下标从1而不是从0开始,(3)要对下标是否越界进行检查。classARRAY{int*v;//指向存放数组数据的空间ints;//数组大小public:ARRAY(inta[],intn);~ARRAY(){delete[]v;}intsize(){returns;}int&operator()(intn);};8____________(7)____________operator()(intn){//()的运算符函数定义if(____________(8)____________){cerr下标越界!;exit(1);}//exit函数的功能是退出程序运行return____________(9)____________;}(7)(8)(9)五、程序分析题(本大题共6小题,每小题5分,共30分)阅读以下程序,写出其运行结果。26.#includeiostream.hclasstest{private:staticintval;inta;public:staticintfunc();staticvoidsfunc(test&r);};inttest::val=10;inttest::func(){val--;returnval;}9voidtest::sfunc(test&r){r.a=15;coutresult3=r.a;}voidmain(){coutresultl=test::func()endl;testa;coutresult2=a.func()endl;test::sfunc(a);}27.#includeiostream.hclassposition{public:intx,y;voidinit(intinitx,intinity);intgetxvalue();intgetyalue();};voidposition::init(intinitx,intinity)10{x=initx;y=inity;}intposition::getxvalue(){returnx;}intposition::getyalue(){returny;}voidprintout(position&rl){coutrl.getxvalue()rl.getyalue()'\n';}voidmain(){positiona[6]={{1,1},{2,2},{3,3},{4,4},{5,5},{6,6}};position*pa=a;a[2].init(7,8);pa-init(5,6);11for(inti=0;i5;i++)printout(*(pa++));}28.#includeiostream.hclasstest{public:virtualvoidfun1(){couttestfun1endl;}virtualvoidfun2(){couttestfun2endl;}voidfun3(){couttestfun3endl;}};classftt:publictest{public:voidfun1(){coutfttfun1endl;}virtualvoidfun2(){coutfttfun2endl;}virtualvoidfun3(){coutfttfun3endl;}};voidmain()12{test*pp;fttq;pp=&q;pp-fun1();pp-fun2();pp-fun3();}29.#includeiostream.hclasscomplex{intreal;intimag;public:complex(intr=0,inti=0):real(r),imag(i){}complexoperator++(){
本文标题:00710月《面向对象程序设计》试题-及答案
链接地址:https://www.777doc.com/doc-3047454 .html