007《面向对象程序设计》精彩试题及问题详解.docx
- 文档编号:6175028
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:13
- 大小:19.17KB
007《面向对象程序设计》精彩试题及问题详解.docx
《007《面向对象程序设计》精彩试题及问题详解.docx》由会员分享,可在线阅读,更多相关《007《面向对象程序设计》精彩试题及问题详解.docx(13页珍藏版)》请在冰豆网上搜索。
007《面向对象程序设计》精彩试题及问题详解
全国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.公用成员
C.保护成员 D.任何成员
8.以下哪个基类中的成员函数表示纯虚函数?
( )
A.virtualvoidtt()=0 B.voidtt(int)=0
C.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; //分母
public //1行
fract(intd=0,intn=1):
den(d),num(n){} //2行
friendfract&operator+=(fract,fract&); //3行
voidshow(){cout< }; //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(); } 错误行的行号为____________、____________和____________。 分别改正为____________、____________和____________。 22.下面程序段第13-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。 class A{ //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的x成员和属于基类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)____________; } voidoutput(){cout< : x<<’’< : x< }; (1) (2) (3) 24.#include #include classA{ int*a;intn;intMaxLen; public: A(): a(0),n(0),MaxLen(0){} A(int*aa,intnn,intMM){ n=nn; MaxLen=MM; if(n>MaxLen)exit (1); a=newint[MaxLen]; ____________(4)____________; //以i为循环变量把aa数组中每个元素值 //传送给a数组的对应元素中 } ~A(); intGetValue(inti){returna[i];}//函数体返回a[i]的值 }; ____________(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中 cout<<"s="< } (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); }; ____________(7)____________operator()(intn) {//()的运算符函数定义 if(____________(8)____________){cerr<<"下标越界! ";exit (1);}//exit函数的功能是退出程序运行 return____________(9)____________; } (7) (8) (9) 五、程序分析题(本大题共6小题,每小题5分,共30分) 阅读以下程序,写出其运行结果。 26.#include classtest{ private: staticintval; inta; public: staticintfunc(); staticvoidsfunc(test&r); }; inttest: : val=10; inttest: : func() { val--; returnval; } voidtest: : sfunc(test&r) { r.a=15; cout<<"result3="< } voidmain() { cout<<"resultl="< : func()< testa; cout<<"result2="< test: : sfunc(a); } 27.#include classposition{ public: intx,y; voidinit(intinitx,intinity); intgetxvalue(); intgetyalue(); }; voidposition: : init(intinitx,intinity) { x=initx; y=inity; } intposition: : getxvalue() { returnx; } intposition: : getyalue() { returny; } voidprintout(position&rl) { cout< } 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); for(inti=0;i<5;i++) printout(*(pa++)); } 28.#include classtest{ public: virtualvoidfun1(){ cout<<"testfun1"< virtualvoidfun2(){ cout<<"testfun2"< voidfun3(){ cout<<"testfun3"< }; classftt: publictest { public: voidfun1(){cout<<"fttfun1"< virtualvoidfun2(){cout<<"fttfun2"< virtualvoidfun3(){cout<<"fttfun3"< }; voidmain() { test*pp; fttq; pp=&q; pp->fun1(); pp->fun2(); pp->fun3(); } 29.#include classcomplex{ intreal; intimag; public: complex(intr=0,inti=0): real(r),imag(i){} complexoperator++(){real++;return*this;} voidshow(){cout< }; voidmain(){ complexc(5,9); ++c; c.show(); } 30.#include classA{ inta; public: A(intaa=0):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计 007 面向 对象 程序设计 精彩 试题 问题 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)