《面向对象程序设计(C)复习题.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计(C)复习题.docx(25页珍藏版)》请在课桌文档上搜索。
1、一选择题(共45题)1.对类的构造函数和析构函数描绘正确的选项是。A.构造函数可以重载,析构函数不能重载B. 构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载2 .继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。A)规律性B.传递性C.重复性D.多样性3 .假设OneCIaSS为一个类,那末该类的复制初始化构造函数的声明语句为。A.0neClass(0neClassp);B.OneClass&(OneCIassp);C. OeClass(OneClass&p);D.OneCIass(One
2、CIass*p);4 .对于构造中定义的成员,其默认的访问权限为OoA.publicB.protectedC.privateD.static5 .下面对静态数据成员的描绘中,不正确的选项是0oA.静态数据成员可以在类体内发展初始化B.静态数据成员不可以在类体内发展初始化C.静态数据成员能受PriVate控制符的作用D.静态数据成员调用前必须初始6 .C+中的类有两种用法:一种是类的实例化,即生成类对象,并参预系统的运行;另一种是通过()派生了新的类。A.复用B.继承C.封装D.引用7 .假定AA为一个类,a为该类公有的数据成员,X为该类的一个对象,那末访问X对象中数据成员a的格式为()。A.X
3、(a)B.XaC.-aD.x.a9 .对于一个类的构造函数,其函数名与类名()。A.彻底样JB.根本一样C.不一样D.无关系10 .一个类的构造函数通常被定义为该类的()成员。A.公有JB.保护C.私有D.友元11 .一个类的析构函数通常被定义为该类的()成员。A.私有B.保护C.公有D.友元12 .一个类的静态数据成员所表示属性()。A,是类的或者对象的属性B.只是对象的属性C.只是类的属性D.类和友元的属性13 .类的析构函数的作用是()o,普通成员函数B.类的初始化C.对象初始化D.删除对象之前的善后工作14 .以下对基类和派生类关系的描绘中,错误的选项是()oA.派生类是基类的详细化B
4、.派生类是基类的子集C.派生类是基类定义的延续D.派生类是基类的组合15 .以下对派生类的描绘中,错误的选项是()。A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的缺省继承方式是PriVatCD.派生类只继承了基类的公有成员和保护成员16 .以下对继承的描绘中,错误的选项是()。A.析构函数不能被继承B.派生类也是基类的组合C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变17 .派生类的对象对它的基类成员中()是可以访问的。A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公
5、有成员18 .以下说法错误的选项是()。A.公有继承的基类中的public成员在派生类中仍是PUbliC的B.公有继承的基类中的private成员在派生类中仍是PriVate的C.私有继承的基类中的public成员在派生类中仍是PriVate的D.保护继承的基类中的public成员在派生类中仍是protected的19 .下面表达错误的选项是()。A.基类的PrOtCCtCd成员在派生类中仍然是protectedB.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是PriVate的D.基类的protected成
6、员不能被派生类的对象访问20 .设置虚基类的声明中,正确的选项是()。A.简化程序B.消除二义性JC.进步运行效率D.减少目的代码21 .关于虚函数的描绘中,正确的选项是0oA.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数即可以在函数说明定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有一样的参数个数和类型22 .以下描绘中,()是抽象类的特征。A.可以说明虚函数B.可以发展构造函数重载C.可以定义友元函数D.不能说明其对象23 .静态数据成员的初始化是在()中发展的。.构造函数B.任何成员函数C.所属类I).全局区24 .当将一个类A或者函数()说明为另一
7、个类B的友元后,类A或者函数f()可以直接访问类B的()。A.只能是公有成员B.只能是保护成员C.只能是除私有成员之外的任何成员D.具有任何权限的成员25 .在重载一个运算符时,其参数表中没有任何参数,这说明该运算符是()0A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符26 .关于运算符重载,以下说法正确的选项是()A.重教时,运算符的优先级可以改变。B.重载时,运算符的结合性可以改变。C.重载时,运算符的功能可以改变。D.重载时,运算符的操作数个数可以改变。27 .从一个基类派生出的各个类的对象之间()。A.共
8、享所有数据成员,每一个对象还包含基类的所有属性B.共享局部数据成员,每一个对象还包含基类的所有属性C.不共享任何数据成员,但每一个对象还包含基类的所有属性D.共享局部数据成员和函数成员28 .C+的继承性允许派生类继承基类的()。.局部特性,并允许增加新的特性或者重定义基类的特性B.局部特性,但不允许增加新的特性或者重定义基类的特性C.所有特性,并允许增加新的特性或者重定义基类的特性D.所有特性,但不允许增加新的特性或者重定义基类的特性29 .派生类的成员函数可以直接访问基类的()成员。A.所有B.公有和保护C.保护和私有1).私有30 .当派生类中有和基类一样名字的成员时,普通来说,()。A
9、.将产生二义性B.派生类的同名成员将覆盖基类的成员C.是不能允许的D.基类的同名成员将覆盖派生类的成员31 .关于纯虚函数和抽象类的描绘中,错误的选项是()。A.纯虚函数是一种特殊的虚函数,它没有详细的实现B.抽象类是指详细纯虚函数的类C.一个基类中说明有纯虚函数,该基类派生类一定再也不是抽象类D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出32 .假设一个类至少有一个纯虚函数,那末就称该类为()。A.抽象类B.虚函数C.派生类D.以上都不对33 .要实现动态联编,必须通过()调用虚函数。A.对象指针B.成员名限定C.对象名D.派生类名34 .以下()成员函数表示虚函数。A.virt
10、ualintvf(int);B.voidvf(int)=0;C.virtualvoidvf()=0;D.virtualvoidvf(int);40.下面描绘中,正确的选项是(。A.virtual可以用来声明虚函数B.含有纯虚函数的类是不可以用来创立对象的,因为它是虚基类C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化35 .在成员函数中发展双目运算符重载时,其参数表中应带有()个参数。A.0B.1C.2D.336 .在重载一运算符时,假设运算符函数的形参表中没有参数,那末不可能的情况是()。A.该运算符是一个单目运算符。B.该运算符函数有一
11、个隐含的参数thisoC.该运算符函数是类的成员函数。D.该运算符函数是类的友元函数。37 .下面对于友元函数描绘正确的选项是()oA.友元函数的实现必须在类的内部定义B.友元函数是类的成员C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员38 .为了使类中的某个成员不能被类的对象通过成员操作符访问,那末不能把该当成员的访问权限定义为()OA.publicB.protectedC.privateD.ststic39 .下面对静态数据成员的描绘中,正确的选项是()oA.静态数据成员是类的所有对象共享的数据B.类的每一个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成
12、员值D.静态数据成员不能通过类的对象调用40 .C+类体系中,不能被派生类继承的有()。A.构造函数B.虚函数C.静态成员函数D.赋值操作函数41以下虚基类的声明中,正确的选项是()。A.classvirtualBrpublicAB.virtualclassB:publicAC.classBrpublicAvirtuall).classB:virtualpublicA42在下面的表达式中,不表示虚继承的是()oA.virtualpublicB.publicvirtualC.publicD.virtual43 .以下关于动态联编的描绘中,错误的选项是()。A.动态联编是以虚函数为根抵B.动态联编
13、是运行时确定所调用的函数代码的C.动态联编调用函数操作是指向对象的指针或者对象引用1) .动态联编是在编译时确定操作函数的44 .下面4个选项中,()是用来声明虚函数的。A.virtualB.publicC.usingD.false45 .编译时的多态性可以通过使用()获得。AA.虚函数和指针B.重载函数和析构函数C.虚函数和对象D.虚函数和引用二填空题(共33题)1 .重载插入运算符时,其运算符函数的返回值类型应当是。StreanI&。2 .派生类可以定义其基金中不具备的数据和操作。3 .对象将其大局部实现细节隐藏起来,这种机制称为告迫1。4 .建立类和类的对象时,系统对类不分配内存,系统对
14、对象分配内存。5 .基类和派生类的关系称为继承和派生。6 .当保护继承时,基类的公有或者保护成员在派生类中成为保护成员,派生类对象不能直接访问基类的任何成员。7 .C+支持两种多态性:编逢时的多态性(重载)和运往时的多态性(虚函数)。、8 .在C+中定义类时,通常是利用变显描绘对象的“特征;不川3描绘对象的“行为”。9 .假定用户为类AB定义了一个构造函数-AB(intaa,char*bb=NULL):a(aa),b(bb),那末该类中至少包含有2个数据成员。10 .类是对象的扯色;而对象那末是类的详细&倒。11 .假设不做特殊说明,类成员的默认访问权限是皿L;构造成员的默认访问权限是公益。1
15、2 .在定义对象的同时初始化其成员变量,需要利用构造函数,用于初始化变量的值可以是固定的常量,也可以通过参数获得。13 .在私有继承关系下,基类的公有成员和保护成员将成为派生类中的必成员,它们只能由派生类的成员函数来访问;基类的私有成员将成为派生类中的不可访问的成员。14 .在保护继承中,基类中的公有成员、保护成员是可见的。15 .面向对象方法构造的系统,其根本单位是型U16 .生成一个派生类对象时,先调用i差的构造函数,然后调用派生类的构造函数。17 .AAoperator+(AAx)表示为运算符+重载。18 .假设在类的定义体中只给出了一个成员函数的原型,那末在类外给出完好定义时,其函数名
16、前必须加之类义和两个冒号分隔符。19 .假设采用xabc(y)表达式调用一个成员函数,在成员函数中使用的*this就代表了类外的X对象。20 .假定用户没有给一个名为AB的类定义析构函数,那末系统为其定义的析构函数为21 .类的成员按访问权限可分为三类:公有、私有、保护。22 .在一个类中定义复制构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,可以防止这两个对象的同一指针同时指向同一块地已23 .假定AB为一个类,那末执行“ABa10;语句时,系统自动调用该类构造函数的次数为IOo24 .假定要把aa定义为AB类中的一个常量整数型数据成员,那末定义语句为constintaa;o2
17、5 .假定AB为一个类,那末该类的复制构造函数的函数头为AB(AB。26 .假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,那末在该类的析构函数中应该包含有一条delol。Pa语句。27 .静态成员函数W能访问类的静态数据成员,非静态成员函数访问类的非静态数据成员。28 .一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上friend的限定。29 .一个单目运算符作为类的成员函数重载时有Oq参数;假设作为友元函数重载,那末有L个参数。30 .假设多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加之举类名和类区分符。31 .
18、假设要保证一个公共的基类在派生类中只产生一个基类子对象,那末必须都以virtual的方式直接继承它。32 .引进虚基类的根本目的是为了消除二义性。33 .在每一个成员函数中,隐含的第一个参数的参数名为this指针。三写出以下程序的运行结果1. (1)#includestructab(chara5;floatb;);voidmain()(abx=Li,89.6;coutx.at,x.bendl;2. (2)#includestructabchara;floatb;);voidf(ab&y)y.a=,W,;y.b=90.5;voidmain()(abx=L,89.5;f();coutx.at,x,
19、bendl;3. (3)#include#includeclassAchara;public:A(char*s)a=newcharstrlen(s)+1;strcpy(a,s);coutaendl;A()deletea;coutDestructor!,endl;);voidmain()Ax(LiMing);Ay(Zhang,1);4. (4)#includeintn=0;classAinta;public:A(intaa=0)a=aa;n+;A()n-;coutnendl;voidshow()coutnendl;);voidmain()Aa;a.show();Ax2;x1.show();a.s
20、how();5. (5)#includeClassAita,b;public:A()a=b=Ojutabendl;)A(intaa,intbb)a=aa;b=bb;coutabendl;);voidmain()Ax,y(10,5);)6. (6)#includeclassBBinta,b;public:BB(inti=O,intj=1)a=i;b=j;BBoperator+(BBc) BBd;d.a=a+c.a*10;d.b=b+c.b*10;returnd;BBoperator-(BBc) BBd;d.a=a*c.a;d.b=b*c.b;returnd;voidshow()cout(a,b)
21、nch);voidmain()BBx(2.6),y(5,5),z;z=x+y;z.show();z=x-y;z.show();7. (7)#includeclassEXitx,y;public:EX(inti=O,intj=1)x=i;y=j;EXoperator*(EXz)EXd;d.x=x*z.x;d.y=y*z.y;returnd;EXoperator/(EXc)EXd;d.x=x-c.x;d.y=y-c.y;returnd;voidshow()cout(a,b)nch);voidmain()EXa(30110),b(2,5),c;c=a*b;c.show();c=ab;c.show()
22、;8. (8)includeclassPointintx,y;public:Point()x=1;y=1;-Point()cout,Point,x,1,yisdeleted.endl;;voidmain()(Pointa;9. (9)#include#includeintcount=0;classPointit,y;public:Point()x=1;y=1;CoUnt+;-Point()count-;);voiddisplay()coutTherearecountpoints.,endl;voidmain()Pointa;display();Pointb5;display();display
23、();10. (10)#includeclassEX1inta,b;public:E1Oa=b=1;cota,bendl;)EX1(intaa,intbb=100)a=aa;b=bb;couta,bendl;);voidmain()EX1x,y(10.2);E1z(200);11. (11)#include#includeclassCsampleinti;public:Csample()cout,constructor1,endl;i=0;Csample(intval)coutConstructor2*endl;i=val;voidDisplay()cout,i=iendl;)Csample(
24、)cout,Destructorendl;;voidmain()(Csamplea,b(10);a.Display();b.Display();12. (12)#includeclassCsampleprivate:inti;staticintk;public:Csample();voidDisplay();;intCsample:k=O;Csample:Csample()(i=0;k+;voidCsample:Display()(couti=i,k=kendl;)voidmain()(Csamplea,b;a.Display();b.Display();)13. (13)#include#i
25、ncludestructA(charc20;floatf;voidf(A&t)(strcpy(t.c,z,MALIANGz,);t.f=70.5jvoidmain()Az=fJMING,77.5;f(z);utz.ctz,fendl;14. (14)#includeclassCsampleinti;public:Csample();voidDisplay();-Csample();;Csample:Csample()coutConstructor,M,;i=0;voidCsample:Display()cout,i=iH;;CSamPle:Csample()coutDestructorendl
26、;voidmain()Csamplea;a.Display();)15. (15)#includeclassbasepublic:voidshow()coutvv调用基类函数show().n;;classderived:publicbasepublic:voidshow()coutvv调用派生类函数show().n;;voidmain()basea1;a1.show();deriveda2;a2.show();16. (16)#includeclassROOTpublic:intsmall;ROOT(intn=2)small=n;)voidshowsmall()coutsmall=,small
27、endl;;classCder1:publicROOTpublic:Cder1(intm):ROOT(m);classCder2:publicROOTpublic:intsmall;Cder2(intn=0)small=n;);voidmain()ROOTA;Cder1bb;Cder2cc;A.showsmall();bb.showsmall();cc.showsmall();17. 17.#include#includeclassCDchar*a;charb20;public:CDO(a=newchar10;strcpy(a,*喂,);StrCPy(b,你好!);voidInit(char*
28、aa,char*bb)a=newcharstrlen(aa)+1;strcpy(a,aa);strcpy(b,bb);voidOutput()couta,bendl;);voidmain()CDdx,dy;dx.Output();dy.Init(中国,北京,2022);dy.Output();)18. 18.#includeclassAinta;public:(intaa=0):a(aa)couta;A0cout”对象被删除n”;;voidmain()A*p;Ax2=10,20,y=40;coutendl;p=newAl;coutendl;deletep;coutendl;)19.19.#in
29、cludeclassAinta10;intn;public:(intaa,intnn):n(nn)for(inti=0;in;i+)ai=aai;intGet(inti)returnai;intSumA(intn)ints=0;for(intj=0;jn;j+)s+=aj;returns;);voidmain()inta=l,1,2,3,5,8;Ax(a,3),y(a,4);intd=l;for(inti=0;i3;i+)d*=x.Get(i);intf=y.SumA(4);cout*d=z,dendl;COUtf=fendl;)20. 20.#includeclassBBinta,b;pub
30、lic:BB(inti=0,intj=l)a=i;b=j;BBoperator+(BBc)BBd;d.a=a+c.a;d.b=b+c.b:returnd;BBoperator-(BBc)BBd;d.a=a-c.a;d.b=b-c.b;returnd;voidshow()couta,b,),endl;;voidmain()BBx(10,15),y(5,7),z;z=x+y;z.show();z=-y;z.show();)21. 21.#include#includeclassPointintx,y;public:Point(intxl=0,intyl=0):x(xl),y(yl)cout*Poi
31、nt:*x,y*n,;“Point()COUtPointdes!nz*;);classTextchartext100;public:Text(char*str)strcpy(text,str)jcout,Textcon!n*;Text()coutTextdes!n*;);classCircleWithText:ublicPoint,publicTextpublic:CircleWithText(intex,intcy,char*msg):Point(ex,cy),Text(msg)cout*PointwithTextcon!n*;CircleWithTextOcout,PointwithTex
32、tdes11z,;);voidmain()CircleWithTextcm(3,4,hello);22.22.#includeclassCrootpublic:intx;Croot()x=2;coutConstructor1An;Croot(intn)x=n;cout,Constructor2.n;)voidshowsmall()coutx=xendl;);classCder1:publicCrtpublic:Cder1(intm):Croot(m);classCder2:publicCrtpublic:intx;Cder2(intn=0)x=n;);voidmain()CrootA;Cder
33、1bb(4);Cder2cc;A.showsmall();bb.showsmall();cc.showsmall();)23.23.#includeclassCrtpublic:intsmall;Croot()Small=2;COUtVvCalledConstructorIAnzz;Croot(intn)small=n;ColItVvCalledConstructor2.nz,;voidshowsmall()coutsmall=smallendl;);classCder1:publicCrtpublic:Cder1(intm):Croot(m);classCder2:publicCrootpu
34、blic:intsmall;Cder2(intn=0)small=n;);voidmain()CrootA;Cder1bb;Cder2cc;A.showsmall();bb.showsmall();cc.showsmall();)四程序1.定义一个第3题的构造体类型的构造体数组stud,输入学生三门课成绩,然后按总分成绩排序后输出学生成绩。#includestructstudintno;charname20;intmath;inteng;intc;intsum;st10;intn=-l;/表示数组元素当前下标voidmain()intx=l,i,j;studt;COUt请输入学生记录,按O完毕
35、x;if(x)n+;读入学号stn.no=x;读入姓名cinstn.namcstn.mathstn.engstn.c;读入三门课成绩stn.sum=stn.math+stn.eng+stn.c;计算三门课总分)elsebreak;for(i=0jin;i+)/采用冒泡排序法对总分排序for(j=0;jstj+l.sum)t=stj;stj=stj+l;stj+l=t;for(i=0;i=n;i+)/输出排序后学生信息coutsti.no,zsti.name。*sti.mathz,sti.c,yzsti.engz,*sti.sumendl;)2 .声明一个哺乳动物Mal类,再由此派生出狗DOg类
36、,声明一个DOg类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。#includeclassMammalpublic:Mammal()coutcallMamma,endl;Mammal()coutDeletebaseclassendl;);classDogpublicMammalpublic:Dog()cout,callDogn;Dog()coutDeleteDogClaSSn;);voidmain()Dogb;3 .定义一个基类有姓名、性别、年龄,再由基类派生出老师类和学生类,老师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。#include#include#incl
37、udeclassbase定义一个基类protected:charname20;/姓名charsex3;性别intage;年龄);classIeacheripublicbase基类派生出老师类intsno;工号charzc20;职称doublewages;工资);classstudentpublicbase基类派生出学生类intsno;学号charbj10;班级charzy10;专业doublescore;入学成绩;4 .建立一个基类Building,用来存储一座楼房的层数、房间数以及它的总平方英尺数。建立派生类Housing,继承Building,并存储下面的内容:卧室和浴室的数量,此外,建立
38、派生类OffiCe,继承Building,并存储灭火器和的数目。然后,编制应用程序,建立住宅楼对象和办公楼对象,并输出它们的有关数据。程序代码:#includeclassBuildingpublic:Building(intf,intr,doubleft)floors=f;rooms=r;footage=ft;)voidshow()coutfloors:,floorsendl;coutrooms:,roomsendl;ut,totalarea:,footageendl;protected:intfloors;introoms;doublefootage;;classHousingpublicB
39、uildingpublic:Housing(intf,intr,doubleft,intbd,intbth):Building(f,r,ft)bedrooms=bd;bathrooms=bth;voidshow()coutnHOUSINGAn1;Building:show();coutbedrooms:,bedrmsendl;coutbathrooms:,bathroomsendl;private:intbedrooms;intbathrooms;;classOfficepublicBuilding(public:Office(intf,intr,doubleft,intph1intex)Bu
40、ilding(f,r,ft)phones=ph;extinguishers=ex;)voidshow()coutnHOUSINGn,;Building:show();coutphones:phonesendl;cout,extinguishers:,extinguishersendl;)private:intphones;intextinguishers;;voidmain()Housinghob(5,7,140,2,2);0fficeoob(8,12,500,12,2);hob.show();oob.show();)5 .声明一个Shape基类,在此根抵上派生出ReCtangle(矩形)类和Circle(圆类,二者都有GetAreao函数计算对象的面积。分别求二种图形的面积。(矩形和宽为10,20o圆的半径为3.5)#includedefinePI3.1415926ttinclude抽象基类BO声明外部接口纯虚函数成员公有派生classbasepublic:virtualvoiddisplay()=0;;classcircle:publi