《面向对象程序设计》试卷第1页共9页东莞理工学院(本科)试卷(A卷)2012--2013学年第二学期《面向对象程序设计》试卷开课单位:计算机学院,考试形式:闭卷,允许带入场题序一二三四五六总分得分评卷人一.单项选择题(15小题,每小题2分,共30分,请将正确答案填写在以下对应的答题表格中)题号12345678910答案题号1112131415答案1、在类定义的外部,可以被访问的成员有()A、所有类成员B、private的类成员C、public或private的类成员D、public的类成员2、下列关于C++语言类的描述中错误的是()。A、类用于描述事物的属性和对事物的操作B、类与类之间通过封装而具有明确的独立性C、类与类之间必须是平等的关系,而不能组成层次结构D、类与类之间可以通过一些方法进行通信和联络3、下列数组定义中,不正确的是()。A、intx[1][3];B、intx[2][2]={1,2,3};C、intx[2][]={1,2,3,4};D、intx[][2]={1,2,3,4}4、定义析构函数时,应该注意:()A、其名与类名完全相同B、返回类型是void类型_____________________…姓名:学号:系别:年级专业:……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………《面向对象程序设计》试卷第2页共9页C、无形参,也不可重载D、函数体中必须有delete语句5、下列函数中,正确的递归函数是()。A、intFun(intn){if(n1)return1;elsereturnn*Fun(n+1);}B、intFun(intn){if(abs(n)1)return1;elsereturnn*Fun(n/2);}C、intFun(intn){if(n1)return1;elsereturnn*Fun(n*2);}D、intFun(intn){if(n1)return1;elsereturnn*Fun(n-1);}6、在C++中编译器所生成的文件的扩展名为()[答案修改过]A、.cppB、.objC、.libD、.exe7、派生类的对象对它的基类成员中的()是可以访问A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的公有成员8.C++设置虚基类的目的是()A、消除二义性B、简化程序C、提高运行效率D、减少目标代码9.以下关于this指针的叙述中正确的是:()A、任何与类相关的函数都有this指针;B、类的成员函数都有this指针;C、类的友员函数都有this指针;D、类的非静态成员函数才有this指针;10实现运行时的多态性采用()A、重载函数B、构造函数C、析构函数D、虚函数11、若有inta[10]={0,1,2,3,4,5,6,7,8,9},*p=&a[5];则()不是对a数组元素的正确引用(其中0≤i10)A、p[i]B、*(*(p+i))C、a[p-a]D、*(&a[i])12、intFunc(int,int);不可与下列哪个函数构成重载()A、intFunc(int,int,int);B、doubleFunc(int,int);C、doubleFunc(double,double);D、doubleFunc(int,double);13、局部变量可以隐藏全局变量,那么在有同名全局变量和局部变量的情形时,可以用()提供对全局变量的访问。【内层隐藏外层】A、域运算符B、指针C、重载D、引用14下列描述中,正确的是:()A、所有的运算符号都可以重载。B、基类类型的指针可以指向子类,子类类型的指针也可以指向基类。【只有public继承《面向对象程序设计》试卷第3页共9页前一个说法才成立】C、可以在类体内对静态数据成员进行初始化。【必须类外初始化】D、动态联编要满足两个条件:被调用的成员函数是虚函数;用指针或引用调用虚函数。15、下面类的定义,有()处错误。classMyClass{private:inti=0;2public:voidMyClass();3~MyClass(intValue);4}1A、1B、2C、3D、4二.填空题(每题2分,共20分)1、static加在局部变量定义前,改变局部变量的生存期但不改变它作用域的。2.类的私有成员只能被它的成员函数和友元函数访问。3.一个抽象类的派生类可以实例化的必要条件是实现了所有的纯虚函数。4、假定AB为一个类,有类AB的两个对象a1,a2;则执行语句AB*a[10]={&a1,&a2};时系统自动调用该类的构造函数的次数为0。5、通过C++语言中类的继承和派生机制,可以扩充和完善已有类以适应新的需求。【答案修改过】6.若在类的定义体中给出了一个成员函数的完整定义,则该函数属于内联函数。7.不同对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为多态。8.对象的核心概念就是通常所说的继承、封装和多态性。9.在一个类中可以定义1个析构函数。10、若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加上const关键字。三.判断题,对的打T错的打F。(5小题,每小题2分,共10分)1.函数形参的作用域是该函数的函数体。(√)姓名:学号:系别:年级专业:……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………《面向对象程序设计》试卷第4页共9页2.纯虚函数必须在抽象类中,所以抽象类中的成员函数必须是纯虚函数。(×)3.派生类中至少包含了它的所有基类的成员,在这些成员中可能有的是不可访问。(√)[答案修改过]4.可以在类的构造函数中对静态数据成员进行初始化。(×)5.构造函数和析构函数都可以定义为虚函数。(×)。四.程序填空(每题6分,共18分)根据程序的功能描述,将程序下划线空白处内容补充完整(每空白3分)1.阅读下面是一段关于类的派生的程序,请完成填空。//Point.h#ifndef_POINT_H#define_POINT_HclassPoint{public:voidinitPoint(floatx=0,floaty=0){this-x=x;this-y=y;}voidmove(floatoffX,floatoffY){x+=offX;y+=offY;}floatgetX()const{returnx;}floatgetY()const{returny;}private:floatx,y;};#endif//_POINT_H//Rectangle.h#ifndef_RECTANGLE_H#define_RECTANGLE_H#includePoint.hclassRectangle:privatePoint{public:voidinitRectangle(floatx,floaty,floatw,floath){this-x=x;this-y=y;this-w=w;姓名:学号:系别:年级专业:……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………《面向对象程序设计》试卷第5页共9页this-h=h;}voidmove(floatoffX,floatoffY){Point::move(offX,offY);}floatgetH()const{returnh;}floatgetW()const{returnw;}private:floatw,h;};#endif//_RECTANGLE_H#includeiostream#includecmathusingnamespacestd;intmain(){Rectanglerect;rect.initRectangle(2,3,20,10);rect.move(3,2);coutThedataofrect(x,y,w,h):endl;rect.getW(),rect.getH()endl;return0;}2.以下程序是定义一个计数器类counter,对其重载运算符“+”,请填空。classcounter{private:intn;public:counter(){n=0;}counter(inti){n=i;}counteroperator+(counter&c)//运算符重载函数{countert;t.n=n+c.n;returnt;}voiddisp(){coutn=nendl;}};voidmain(){counterc1(5),c2(10),c3;c3=c1+c2;c1.disp();《面向对象程序设计》试卷第6页共9页c2.disp();c3.disp();}3.下面是动态创建一个8x9x8的三维数组的一段程序,请按提示完成填空。#includeiostreamusingnamespacestd;intmain(){①float***cp=newfloat**[8];//创建符合题目要求的指针并初始化for(intk=0;k8;k++){cp[k]=newfloat*[9];}for(intm=0;m8;m++){for(intn=0;n9;n++){cp[m][n]=newfloat[8];}}②float(*cp)[9][8]=newfloat[8][9][8];//两种方法都可以,具体看填空的地方有多大for(inti=0;i8;i++)for(intj=0;j9;j++)for(intk=0;k8;k++)*(*(*(cp+i)+j)+k)=static_castfloat(i*100+j*10+k);for(i=0;i8;i++){for(intj=0;j9;j++){for(intk=0;k8;k++)coutcp[i][j][k];coutendl;}coutendl;}delete[]cp;//释放指针指向的空间return0;}五、程序执行(每题5分,共10分)阅读下面的程序,并分别写出程序执行的完整输出结果。1.程序1#includeiostreamusingnamespacestd;classbase{public:《面向对象程序设计》试卷第7页共9页staticintn;base(intx){n=x;}virtualvoidset(intm){n=m;coutn'';}};intbase::n=0;classderiveA:publicbase{public:deriveA(intx):base(x){}voidset(intm){n+=m;coutn'';}};classderiveB:publicbase{public:deriveB(intx):base(x){}voidset(intm){n+=m;coutn'';}};intmain(){deriveAdl(0);deriveBd2(1);base*pbase;pbase=&dl;pbase-set(1);pbase-base::set(0);pbase=&d2;pbase-set(1);pbase-base::set(3);coutendl;return0;}输出结果:20132.程序2#includeiostreamusingnamespacestd;classBase1{public:inti;Base1(intx){i=x;coutConstructingBase1iendl;}};classBase2:publicBase1{public:Base2(intj):Base1(j){coutConstructingBas