首页 C习题与解析-继承和派生

C习题与解析-继承和派生

举报
开通vip

C习题与解析-继承和派生C习题与解析■继承和派生6.1分析以下程序的执行结果#includeclassbase{public:base(){cout«HconstrUCtingbaseclassHclassbase{intn;public:base(inta){cout«Hconstructingbaseclass"«endl;n二a;cout«Hn=”vvnvvendl;}~base(){cout«"destructingbaseclassu«endl;}};classsubs:publicbase{basebobj;intm;publ...

C习题与解析-继承和派生
C习题与解析■继承和派生6.1分析以下程序的执行结果#includeclassbase{public:base(){cout«HconstrUCtingbaseclassHclassbase{intn;public:base(inta){cout«Hconstructingbaseclass"«endl;n二a;cout«Hn=”vvnvvendl;}~base(){cout«"destructingbaseclassu«endl;}};classsubs:publicbase{basebobj;intm;public:subs(inta」ntb,intc):base(a),bobj(c){cout«HconstructingsubcassH«endl;m=b;cout«,,m=,l«m«endI;}^subs(){cout«"destructingsubclassH«endl;}};voidmain(){subss(l,2,3);}解:本题说明派生类中含有对象成员情况下构造函数和析构函数的调用顺序。这里base为基类,subs为派生类,subs类的构造函数中含有对象成员。所以输出为:constrcutingbaseclassconstructingbaseclassn=3constructingsubclassm=2destructingsubclassdestructingbaseclassdestructingbaseclass注重:当派生类中含有对象成员时,构造函数的调用顺序如下:1)基类的构造函数2)对象成员的构造函数3)派生类的构造函数  析构函数的调用顺序与之相反6.3分析以下程序的执行结果#includeclassA{public:intn;};classB:publicA{};classC:publicA{};classD:publicB,publicCintgetn(){returnB::n;}};voidmain(){Dd;d.B::n=10;d.C::n=20;cout«d.B::nvv"/'vvd・C::nvvendl;}解:D类是从类和类派生的而类和类又都是从类派生的,但各有自己的副本。所以对于对象d,d.B::n与d.C::n是两个不同的数据成员它们互无联系。所以输出为:10,206.4分析以下程序的执行结果#includeclassA{public:intn;};classB:virtualpublicA{};classC:virtualpublicA{};classD:publicB,publicC{intgetn(){returnB::n;}};voidmain(){Dd;d.B::n=10;d.C::n=20;cout«d.B::nvv"/'vvd・C::nvvendl;}解:D类是从类和类派生的而类和类乂都是从类派生,但这是虚继续关系即是虚基类因此和共用一个的副本所以对于对象d,d.B::n与d.C::n是一个成员。所以输出为:20,206.5假设图书馆的图书包含书名、编号作者属性读者饮包含姓名和借书证属性每位读者最多可借5本书,编写程序列出某读者的借书情况。解: 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 一个类,从它派生出胃病书类book和读者类reader,在reader类中有一个rentbookf)成员函数用于借阅图书。程序代码如下:本程序的执行结果如下:#include#includeclassobject{charname[20];intno;public:object(){}object(charna[],intn){strcpy(name,na);no二n;}voidshow(){cout 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。解:vehicle类是基类由它派生出car类和truck类将公共的属性和方法放在vehicle类屮。本题程序如下:本程序的执行结果如下:#includeclassvehicle//定义汽车类{protected:intwheels;//车轮数floatweight;//重量public:vehicle(intwheels,floatweight);intget_wheels();floatget_weight();floatwheel_load();voidshow();};classcar:publicvehicle//定义小车类{intpassengerjoad;//载人数public:car(intwheelsjloatweightjntpassengers=4);intget_passengers();voidshow();};classtruck:publicvehicle//定义卡车类{intpassenger_load;//载人数floatpayload;//载重量public:truck(intwheels,floatweightjntpassengers=2,floatmax_load=24000.00);intget_passengers();floatefficiency();voidshow();};vehicle::vehicle(intwheels,floatweight){vehicle::wheels=wheels;vehicle::weight=weight;}intvehicle::get_wheels(){returnwheels;}floatvehicle::get_weight(){returnweight/wheels;}voidvehicle::show(){cout«”车轮:”«wheels«”个“«endl;cout«"重量:”«weight«"公斤“vvendl;}car::car(intwheels,floatweight,intpassengers):vehicle(wheels,weight)passenger_load=passengers;}intcar::get_passengers(){returnpassenger_load;}voidcar::show(){cout«"车型:小车"«endl;vehicle::show();cout«"载人:”«passenger_load«”人”«endl;cout«endl;}truck::truckfintwheels,floatweight,!ntpassengers,floatmax_load):vehicle(wheels,weight){passenger_load=passengers;payload=max_load;}inttruck::get_passengers(){returnpassenger_load;}floattruck::efficiency(){returnpayload/(payloadweight);}voidtruck::show(){coutvv“车型:卡车”«endl;vehicle::show();cout«"载人:”«passenger_load«”人”«endl;cout«"效率:”«efficiency()«endl;cout«endl;}voidmain(){carcarl(4,2000,5);trucktrulflO,8000,3,340000);cout«”输出结果”«endl;carl,show();trul.show();}输岀结果车型:小车车轮:4个重量:2000公斤载人:5人车型:卡车车轮:10个重量:8000公斤载人:3人效率:0.9770126.7设计一个圆类circle和一个桌子类table,另设i^一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。解:circle类包含私有数据成员radius和求圆面积的成员函数getareaf);table类包含私有数据成员height和返回高度的成员函数getheight()oroundtable类继续所有上述类的数据成员和成员函数,添加了私有数据成员color和相应的成员函数。本题程序如下:#include#includeclasscircle{doubleradius;public:circle(doubler){radius=r;}doublegetareaf){returnradius*radius*3.14;}};classtable{doubleheight;public:table(doubleh){height=h;}doublegetheight(){returnheight;}};classroundtable:publictable,publiccircle{char*color;public:roundtablefdoubleh,doubler,charc[]):circle(r),table(h){color二newchar[strlen(c)l];strcpy(color,c);}char*getcolor(){returncolor;}};voidmain()roundtablert(0.8,1.2,“黑色“);cout«”圆桌属性数据:”«endl;cout«"高度:”«rt.getheight()«”米'vvendl;cout«”面积:"«rt.getarea()«“平方米”«endl;cout«"颜色:"«rt.getcolor()«endl;}本程序的执行结果如下:圆桌属性数据:高度:0.8米面积:4.5216平方米颜色:黑色6.8设计一个虚基类base,包含姓名和年龄私有数据成员以及相关的成员函数,由它派生出领导类leader,包含职务和部门私有数据成员以及相关的成员两数。再rflbase派生出工程师类engineer,包含职称和专业私有数据成员以及相关的成员函数。然后由leda和engineer类派生出主任工程师类chairmano釆用一些数据进行测试。解:由于chairman类从leader类和engineer类派生,而leader类和engineer类都是从base类派生的,所以为了使base只存一个副本,必须采用虚拟派生的方法。本题程序如下:#include#includeclassbase//基类{char*name;//姓名intage;//年龄public:base(){}voidsetname(charna[]){name=newchar[strlen(na)l];strcpy(name,na);}voidsetage(inta){age=a;}char*getname(){returnname;}intgetagef){returnage;}};classleader:virtualpublicbase//领导类char*dep;//部门public:leader(){}voidsetjob(charjb[]){job=newchar[strlen(jb)l];strcpy(job,jb);}voidsetdep(chardp[]){dep=newchar[strlen(dp)1];strcpy(dep,dp);}char*getjob(){returnjob;}char*getdep(){returndep;}};classengineer:virtualpublicbase//工程师类{char*major;//专业char*prof;//职称public:engineer(){}voidsetmajor(charmaj[]){major=newchar[strlen(maj)l];strcpy(major,maj);}voidsetprof(charpf[]){prof=newcharfstrlen(pf)l];strcpy(prof,pf);}char*getmajor(){returnmajor;}char*getprof(){returnprof;}};classchairmarepublicleader,publicengineer//主任工程师类{};voidmain(){chairmanc;c.setname("李明”);c.setage(42);c.setjob("处长”);c.setdepf"设计处”);c.setmajor("电站锅炉设计”);c.setprof(n高级工程师“);cout«"输出结果:"«endl;cout«""«c.getname()«",年龄”«c.getage()«"岁,担任”«c.getdep()«c.getjob()«H,H«endl;cout«""«c.getprof()«",从事”《c.getmajor()«"专业”vv”。"«endl;}本程序的执行结果如下:输出结果:李明,年龄42岁,担任设计处处长,高级工程师,从事电站锅炉设计专业。三层交换技术交换机与路由器密码恢复交换机的选购路由器设置专题路由故障处理 手册 华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载 数字化校园网解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 题1.分析以下程序的执行结果:#includeclassbase{intn;public:base(){};base(inta){cout«"constructingbaseclass"«endl;n=a;cout«  «n«endl;}~base(){cout«"destructingbaseclass"«endl;}};classsubs:publicbase{intm;public:subs(int3,intb):base(a){cout«"constructingsubclass"«endl;m=b;cout«"m="«m«endl;}~subs(){cout«”destructingsubclass1'«endl;}};voidmain()解:这里base是基类,subs为派生类,subs类的构造函数中含有调用基本类的构造函数。所以输出为:constructingbaseclassconstructingsubclassn=2destructingbaseclassdestructingsubclass题2.分析以下程序的执行结果:#ineludeclassSample{protected:intx;public:Sample(){x=0;}Sample(intval){x=val;}voidoperator(){x;}};classDerived:publicSample{inty;public:Derived():Sample(){y=0;}Derived(intvail,intval2):Sample(vall){y=val2;}voidoperator-(){x-;y-;}voiddisp(){cout«"x="«x«"y="«y«endl;f}};voidmain(){Derivedd(3,5);d.disp();d;d.disp();d-;d・・;d.disp();解:所有运算都是对X而言的。所以输出为:x=3,y=5x=4,y=5x=2,y=5题3分析以下程序的执行结果:#includeclassA{inta;a=la=3public:A(inti){a=i;cout«"constructingclassA"«endl;}voidprint(){cout«a«endl;}~A(){cout«"destructingclassAH«endl;}};classBl:publicA{intbl;bl=2public:BlfintiJntj):A(i){bl=j;cout«"constructingclassBl”«endl;voidprint(){A::print();cout«bl«endl;}~BI(){cout«"destructingclassBl”«endl;}};classB2:publicA{intb2;  b2=4public:B2(inti,intj):A(i);{b2=j;cout«"constructingclassB2H«endl;}voidprint()A::print();cout«b2«endl;}~B2(){cout«"destructingclassB2"«endl;}};classC:publicBlzpublicB2{intc;public:C(inti,intj,intk,intI,intm):BI(izj),B2(k,l),c(m){cout«"constructingclassC"«endl;}voidprint(){Bl::print();B2::print();cout«c«endl;}~C(){cout«"destructingclassC"«endl;}};voidmain(){C€1(1,23,4,5);cl.print();}解:C类是从Bl类和B2类派生的,而Bl和B2类乂都是从A类派生,但各有自己的副本,所有这些成员函数均有print()成员函数。所以,在C的成员函数实现中,调用print))时,要加上类作用域运算符““〃。所以输出为:constructingclassAconstructingclassBlconstructingclassAconstructingclassB2constructingclassC12345destructingclassCdestructingclassB2destructingclassAdestructingclassBldestructingclassA题4分析以下程序执行结果:#includeclassA{public:A(char*s){cout«s«endl;}~A(){}};classB:publicA{public:B(char*sl,char*s2):A(sl){cout«s2«endl;}};classC:publicA{public:C(char*slzchar*s2):A(sl){cout«s2«endl;}};classD:publicB,publicC{public:D(char*sl,char*s2,char*s3,char*s4):B(sl,s2),C(sl,s3){cout«s4«endl;}voidmain(){Ddf'classA'7'classB'7'classC'/'classDH);}解:D类是从B和C类派生的,而B和C类又都是从A类派生,但各有自己的副本。所以输出为:classAclassBclassAclassCclassD
本文档为【C习题与解析-继承和派生】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_751406
暂无简介~
格式:doc
大小:57KB
软件:Word
页数:42
分类:
上传时间:2022-08-01
浏览量:0