您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 全国2005年10月面向对象程序设计试题
全国2005年10月面向对象程序设计试题课程代码:02328一、单项选择题(本大题共12小题,每小题2分,共24分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.所谓多态性是指()A.不同的对象调用不同名称的函数B.不同的对象调用相同名称的函数C.一个对象调用不同名称的函数D.一个对象调用不同名称的对象2.有如下程序段:int*p,a[6]={-1,0,1,2,3,4};p=a+3;执行该程序段后,*p的值为()A.4B.2C.1D.NULL3.类MyA的拷贝初始化构造函数是()A.MyA()B.MyA(MyA*)C.MyA(MyA&)D.MyA(MyA)4.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为()A.内联函数B.重载函数C.递归函数D.嵌套函数5.以下有关继承的叙述正确的是()A.构造函数和析构函数都能被继承B.派生类是基类的组合C.派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员D.基类的公有成员一定能被派生类的对象访问6.解决二义性问题的方法有()A.只能使用作用域分辨操作符B.使用作用域分辨操作符或赋值兼容规则C.使用作用域分辨操作符或虚基类D.使用虚基类或赋值兼容规则7.假设类X以类Y作为它的一个基类,并且X类的名字func()支配Y类的名字func(),obj为类X的对象,则obj.func()语句实现的功能为()A.先执行类X的func(),再执行访问类Y的func()B.先执行类Y的func(),再执行访问类X的func()C.执行类X的func()D.执行类Y的func()8.以下叙述正确的是()A.构造函数调用虚函数采用动态联编B.构造函数可以说明为虚函数C.当基类的析构函数是虚函数时,它的派生类的析构函数也是虚函数D.析构函数调用虚函数采用动态联编9.以下关于抽象类的描述正确的是()A.不能说明指向抽象类对象的指针或引用B.可以说明抽象类对象C.抽象类的纯虚函数的实现可以由自身给出,也可以由派生类给出D.抽象类的纯虚函数的实现由派生类给出10.在下面格式化命令的解释中,错误的...是()A.ios::skipws跳过输入中的空白字符B.ios::fill()获得当前的填充字符C.ios::hex转换基数为八进制形式D.ios::precision返回当前的精度11.下面运算符中,不能被重载的运算符是()A.=B.-C.?:D.[]12.下列有关模板和继承的叙述正确的是()A.模板和继承都可以派生出一个类系B.从类系的成员看,模板类系的成员比继承类系的成员较为稳定C.从动态性能看,继承类系比模板类系具有更多的动态特性D.相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系二、填空题(本大题共8小题,每小题2分,共16分)请在每小题的空格中填上正确答案。错填、不填均无分。13.在C++中函数原型不但能标识函数的__________,而且能标识函数参数的__________。14.如果类的名称是MyClass则析构函数名为__________,一个类最多能有__________个析构函数。15.假设类X的对象x是类Y的成员对象,则“YObj”语句执行时,先调用类__________的构造函数,再调用类__________的构造函数。16.基类的公有成员在私有派生类中是__________成员,基类的保护成员在公有派生类中是__________成员。17.对虚函数使用对象指针或引用,系统使用__________联编,对虚函数使用对象调用时,系统使用__________联编。18.静态成员定义的关键字为__________,一般通过__________来访问静态成员。19.类在面向对象程序设计中非常重要,在设计类时可以参考一些原则,如充分利用__________增加类的自身可靠性,通过继承建立__________等等。20.将关键字__________写在函数体之前函数头之后,说明该函数是一个__________,可以防止函数改变数据成员的值。三、改错题(本大题共5小题,每小题2分,共10分)21.指出下面引用性说明类MyClass的用法的错误之处,并说明出错原因。classMyClass;voidmain(){MyClassobj1;MyClass*p;voidfunc(MyClassobj);}22.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。classbase{protected:intp;public:Base(intm){p=m;}};voidf(){Basea(10);couta.pendl;}23.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。classbase{public:intx;};classOne:publicbase{};classTwo:publicbase{};classOT:publicOne,publicTwo{public:intfunc();};voidmain(){OTp;p.base::x;}24.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。classBase{public:virtualvoidfun()=0;};classTest:publicBase{public:virtualvoidfun(){cout″Test.fun=″endl;}};voidmain(){Basea;Test*p;p=&a;}25.下面程序中有一处错误,请用下横线标出错误所在行并提出修改意见。classA{private:staticintx;};voidfunc(inta){x=a;}四、完成程序题(本大题共5小题,每小题4分,共20分)26.为使下面程序输出结果为:1*23+4请在横线处填上适当的字句,以使程序完整。#includeiostream.hclassA{private:intR1,R2;public:A(intr1,intr2){R1=r1;R2=r2;}voidprint();voidprint()const;};voidA::print(){coutR1①__________R2endl;}voidA::print()const{coutR1②__________R2endl;}voidmain(){Aa(1,2);constAb(3,4);a.print();b.print();}27.在下面横线处填上适当字句,完成类中成员函数的定义。#includeiostream.hclassA{private:intX,Y;public:A(){X=Y=0;}A(intxx,intyy):X(xx),Y(yy){}A(A&a){①__________}intGetX(){returnX;}intGetY(){returnY;}voidSetXY(intx,inty){X=x;Y=y;}};intmain(){A*Ptr=newA[2];Ptr[0].SetXY(5,10);Ptr[1].SetXY(15,20);cout″ReleasePtr……″endl;②__________;//释放动态分配内存return0;}28.请在横线处填上适当的字句,以使程序完整。#includeiostream.h#include″math.h″classPoint{private:doubleX,Y;①__________Line;public:Point(doublex=0,doubley=0){X=x;Y=y;}Point(Point&p){X=p.X;Y=p.Y;}};classLine{private:Pointp1,p2;public:Line(Point&xp1,Point&xp2):②__________{}doubleGetLength();};doubleLine::GetLength(){doubledx=p2.X-p1.X;doubledy=p2.Y-p1.Y;returnsqrt(dx*dx+dy*dy);}voidmain(){Pointp1,p2(3,4);LineL1(p1,p2);coutL1.GetLength()endl;}29.下面程序横线处填上适当的字句,使类定义完整。#includeiostream.h#includeiomanip.hclassArrayFloat{protected:float*pA;intsize;//数组大小(元素个数)public:ArrayFloat(intsz=10){size=sz;pA=newfloat[size];}~ArrayFloat(void){①__________;//释放动态内存}intGetSize(void)const{returnsize;}float&operator[](inti)//重载数组元素操作符″[]″{returnpA[i];}voidPrint();};voidArrayFloat::Print(){inti;for(i=0;i②__________;i++){if(i%10==0)coutendl;coutsetw(6)pA[i];}coutendl;}voidmain(){ArrayFloata(20);for(inti=0;ia.GetSize();i++)a[i]=(float)i*2;a.Print();}30.在横线处填上适当字句,完成下面复数类的定义。#includeiostream.hclassComplex{private:doublereal,image;public:Complex(doubler=0,doublei=0){real=r;image=i;}friendComplexoperator+(Complex&a,constComplex&c);//复数加法运算符Complexoperator=(Complexc2);//复数赋值运算符};Complexoperator+(Complex&a,constComplex&b){Complex*t=newComplex(①__________);return*t;}ComplexComplex::operator=(Complexc2){real=c2.real;image=c2.image;return(②__________);}五、程序分析题(本大题共6小题,每小题5分,共30分)31.写出下面程序的输出结果。#includeiostream.hclassB{private:intY;public:B(inty=0){Y=y;cout″B(″y″)\n″;}~B(){cout″~B()\n″;}voidprint(){coutY″″;}};classD:publicB{private:intZ;public:D(inty,intz):B(y){Z=z;cout″D(″y″,″z″)\n″;}~D(){cout″~D()\n″;}voidprint(){B∶∶print();coutZendl;}};voidmain(){Dd(11,22);d.print();}32.写出下面程序的输出结果。#includeiostream.hclassA{private:doubleX,Y;public:A(doublexx=0,doubleyy=0){X=xx;Y=yy;cout″构造函数被调用(″X″,″Y″)″endl;}A(A&p){X=p.X;Y=p.Y;}};Af(){Aa(1,2);returna;}voidmain(){Aa(4,5);Ab(a);b=f();}33.写出下面程序的输出结果。#includeiostream.hcl
本文标题:全国2005年10月面向对象程序设计试题
链接地址:https://www.777doc.com/doc-4779293 .html