-1-C++面向对象程序设计复习试题类型1、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。15题,每小题2分,共30分)[主要从作业题目中抽出来]2.填空题。(10题,每小题3分,共30分)3、阅读程序,写出程序运行结果。【也称计算题】(3题,每小题5分,共15分)4、程序编制题【也称综合分析题】。(第1、2题每题8分,第3题9分,共25分)重点复习内容打*号是重点,打▲号是编程题出题范围*基本概念,对象,消息,类。面向对象系统特性,封装性,继承性,多态性。*▲C++类的构成,类与对象,构造与析构,动态存储,类嵌套。静态成员,对象数组,友元。*函数重载。运算符重载。*引用定义与引用参数*基类与派生类的定义。*基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。多继承与虚基类。*多态性与虚函数。纯虚函数、抽象类。*▲函数模板。*▲使用类来定义对象并在程序中的应用题型样题填空题1.假定AB为一个类,则执行“ABa[10];”语句时,系统自动调用该类的构造函数的次数为_________。答案:102.可以用p.a的形式访问派生类对象P的基类成员a,其中a是_________。答案:公有继承的公有成员3.能作为重载函数的调用的依据是_________。答案:参数个数、参数类型4.在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是_________答案:eof5.函数重载是指_________。答案:两个或两个以上的函数取相同的函数名,但形参的个数或类型不同6.在派生类中重新定义虚函数时必须在_________方面与基类保持一致。答案:参数个数阅读程序例题【计算题】1.分析以下程序的执行结果#includeiostream.hclassSample{intx,y;public:Sample(){x=y=0;}Sample(inta,intb){x=a;y=b;}~Sample(){if(x==y)cout“x=y”endl;elsecout“x!=y”endl;}voiddisp(){cout“x=”x“,y”=yendl;}};voidmain(){Samples1,s2(2,3);s1.disp();s2.disp();}解:x=0,y=0x=2,y=3x!=yx=y2.分析以下程序的执行结果#includeiostream.hintadd(intx,inty){-2-returnx+y;}intadd(intx,inty,intz){returnx+y+z;}voidmain(){inta=4,b=6,c=10;coutadd(a,b),add(a,b,c)endl;}解:10,203.分析以下程序执行结果#includeiostream.hintadd(intx,inty){returnx+y;}doubleadd(doublex,doubley){returnx+y;}voidmain(){inta=4,b=6;doublec=2.6,d=7.4;coutadd(a,b),add(c,d)endl;}解:10,104.分析以下程序执行的结果#includeiostream.hclassSample{intx,y;public:Sample(){x=y=0;}Sample(inta,intb){x=a;y=b;}voiddisp(){coutx=x,y=yendl;}};voidmain(){Samples1,s2(1,2),s3(10,20);Sample*pa[3]={&s1,&s2,&s3};for(inti=0;i3;i++)pa[i]-disp();}解:x=0,y=0x=1,y=2x=10,y=205.分析以下程序的执行结果:#includeiostream.hclassbase{intn;public:base(){};base(inta){coutconstructingbaseclassendl;n=a;coutn=nendl;}~base(){coutdestructingbaseclassendl;}};classsubs:publicbase{intm;public:subs(inta,intb):base(a){coutconstructingsubclassendl;m=b;coutm=mendl;}~subs(){coutdestructingsubclassendl;}};voidmain(){subss(1,2);}解:constructingbaseclassn=1constructingsubclassm=2destructingsubclassdestructingbaseclass6.分析以下程序的执行结果:-3-#includeiostream.hclassSample{protected:intx;public:Sample(){x=0;}Sample(intval){x=val;}voidoperator++(){x++;}};classDerived:publicSample{inty;public:Derived():Sample(){y=0;}Derived(intval1,intval2):Sample(val1){y=val2;}voidoperator--(){x--;y--;}voiddisp(){coutx=x,y=yendl;}};voidmain(){Derivedd(3,5);d.disp();d++;d.disp();d--;d--;d.disp();}解:x=3,y=5x=4,y=5x=2,y=37分析以下程序执行结果:#includeiostream.hclassA{public:A(char*s){coutsendl;}~A(){}};classB:publicA{public:B(char*sl,char*s2):A(sl){couts2endl;}};classC:publicA{public:C(char*sl,char*s2):A(sl){couts2endl;}};classD:publicB,publicC{public:D(char*sl,char*s2,char*s3,char*s4):B(sl,s2),C(sl,s3){couts4endl;}};voidmain(){Dd(classA,classB,classC,classD);}解:classAclassBclassAclassCclassD补充例题1.分析以下程序的执行结果#includeiostream.htemplateclassTTmax(Tx,Ty){return(xy?x:y);}voidmain()-4-{coutmax(2,5)“,”max(3.5,2.8)endl;}解答:5,3.52.分析以下程序的执行结果#includeiostream.hvoidmain(){inta[]={10,20,30,40},*pa=a;int*&pb=pa;pb++;cout*paendl;}解答:输出为:203.分析以下程序的执行结果#includeiostream.htemplateclassTTabs(Tx){return(x0?x:-x);}voidmain(){coutabs(-3)“,”abs(-2.6)endl;}解答:输出为:3,2.64.分析以下程序的执行结果#includeiostream.hclassSample{charc1,c2;public:Sample(chara){c2=(c1=a)-32;}voiddisp(){coutc1“转换为”c2endl;}};voidmain(){Samplea('a'),b('b');a.disp();b.disp();}解答:a转换为Ab转换为B5.分析以下程序的执行结果#includeiostream.hvoidmain(){inta;int&b=a;//变量引用b=10;cout“a=”aendl;}解答:输出为:a=106.分析以下程序的执行结果#includeiostream.hclassSample{intx;public:Sample(){};Sample(inta){x=a;}Sample(Sample&a){x=a.x+++10;}voiddisp(){cout“x=”xendl;}};voidmain(){Samples1(2),s2(s1);s1.disp();s2.disp();}解答:x=3//++运算的结果x=12//2+107.分析以下程序的执行结果#includeiostream.hclassSample{intx;public:Sample(){};Sample(inta){x=a;}Sample(Sample&a){x=a.x+1;}voiddisp(){cout“x=”xendl;}};voidmain(){Samples1(2),s2(s1);s2.disp();}解答:输出为:x=3。程序编制题例题【综合分析题】例1,写出一个梯形类,操作有求面积和周长-5-分析:由于要求梯形的面积和周长,那就要为梯形提供上底,下底,高,左边长,右边长等属性。因此,梯形类描述为:Classechelon{Inttop,bottom,height,llength,rlength;Public:Echelon(){。。。}//构造函数IntArea(){。。。}//求面积IntPerimeter(){。。。。}//求周长}2.设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。解:circle类包含私有数据成员radius和求圆面积的成员函数getarea();table类包含私有数据成员height和返回高度的成员函数getheight()。roundtable类继承所有上述类的数据成员和成员函数,添加了私有数据成员color和相应的成员函数。本题程序如下:#includeiostream.h#includestring.hclasscircle{doubleradius;public:circle(doubler){radius=r;}doublegetarea(){returnradius*radius*3.14;}};classtable{doubleheight;public:table(doubleh){height=h;}doublegetheight(){returnheight;}};classroundtable:publictable,publiccircle{char*color;public:roundtable(doubleh,doubler,charc[]):circle(r),table(h){color=newchar[strlen(c)+1];strcpy(color,c);}char*getcolor(){returncolor;}};voidmain(){roundtablert(0.8,1.2,黑色);cout圆桌属性数据:endl;cout高度:rt.getheight()米endl;cout面积:rt.getarea()平方米endl;cout颜色:rt.getcolor()en