实验六继承与派生_第1页
实验六继承与派生_第2页
实验六继承与派生_第3页
实验六继承与派生_第4页
实验六继承与派生_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、继承与组合一、实验目的1 .了解继承在面向对象程序设计中的重要作用。2 .进一步理解继承与派生的概念。3 .掌握通过继承派生出一个新的类的方法。4 .了解虚基类的作用和用法。5 .掌握类的组合二、实验内容1.请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。#includeusingnamespacestd;classApublic:A()coutA:A()called.n;virtualA()coutA:A()called.n;classB:publicApublic:B(inti)coutB:B()called.n;buf=newchari;)virt

2、ual-B()deletebuf;coutB:B()called.n;)private:char*buf;);voidfun(A*a)coutMayyousucceed!lied.Maj,1yousucceedfE::TBcalled.R:called.exiteduithreturnvalue:0Pressanykeytocontinu.e.(2)#includeusingnamespacestd;classApublic:A(inta,intb):x(a),y(b)coutAconstructor.endl;voidAdd(inta,intb)x+=a;y+=b;voiddisplay()

3、cout(x,y);A()coutdestructorA”endl;private:intx,y;);classB:privateAprivate:inti,j;AAobj;public:B(inta,intb,intc,intd):A(a,b),i(c),j(d),Aobj(1,1)coutBconstructor”endl;voidAdd(intx1,inty1,intx2,inty2)A:Add(x1,y1);i+=x2;j+=y2;voiddisplay()A:display();Aobj.display();cout(i,j)endl;B()coutdestructorB.dEStJ

4、LlCtOUF8.destmet;onF.工ilestrucLurft.Pocecscsxxtedwitli片目七unvalmiG3Pressduiiykeytocuntlime.微软拼音半=#includeusingnamespacestd;classApublic:A(inta):x(a)coutAconstructorxendl;intf()return+x;A()coutdestructorA”endl;private:intx;classB:publicvirtualAprivate:inty;AAobj;public:B(inta,intb,intc):A(a),y(c),Aobj

5、(c)coutBconstructor.yendl;intf()A:f();Aobj.f();return+y;voiddisplay()coutA:f()tAobj.f()tf()endl;B()coutdestructorB.endl;classC:publicBpublic:C(inta,intb,intc):B(a,b,c),A(0)coutCconstructor.endl;classD:publicC,publicvirtualApublic:D(inta,intb,intc):C(a,b,c),A(c)coutDconstructor.endl;D()coutdestructor

6、D.endl;Dd(7,8,9);d.f();d.display();return0;)(3)程序运行结果:Aconstructor.9Aconstructor.9Bconstructor.9Cconstructor.Dconstructor.121211destructorD.destructorB.destructorA.destructorA.D:c+6.3+exeRconstruLctor.于ACDnstmctor.9Bconstmetor-.9Cgonat111fcLic:七0ir.0constritetor.121211destruetorD.AestiMic1:isp3A.a.l

7、c.st-mGlrarHlesitrnictonFR.Proexitedwxtliireturnvalimc3Pressaunypkeytocontinue.瀚抖音半二(4)#includeusingnamespacestd;classBase1public:Base1()coutclassBase1!endl;classBase2public:Base2()(coutclassBase2!endl;);classLevel1:publicBase2,virtualpublicBase1(public:Level1()(coutclassLevel1!endl;);classLevel2:pu

8、blicBase2,virtualpublicBase1(public:Level2()(coutclassLevel2!endl;);classTopLevel:publicLevel1,virtualpublicLevel2public:TopLevel()(coutclassTopLevel!endl;);intmain()TopLevelobj;return0;(4)程序运行结果:classBase1!classBase12classLeve12!classBase2!classLeve11!DAc+6AexeelassBasel!,1或券0Ra,掌e2!】lai尊号LeuE12f1理

9、毋自0as2!jldLS:瑞LentlitclasslopLevelfEruc-ets-saxJLtrcdwi-tlnrcLujtiivalimc3E*reESaunypkeytocontinue.敢抖音半二2、 某出版系统发行图书和磁带,利用继承设计管理出版物的类。要求如下:建立一个基类Publication存储出版物的标题title、出版物名称name、单价price及出版日期date。用Book类和Tape类分别管理图书和磁带,它们都从Publication类派生。Book类具有保存图书页数的数据成员page,Tape类具有保存播放时间的数据成员playtime。每个类都有构造函数、析构

10、函数,且都有用于从键盘获取数据的成员函数inputData(),用于显示数据的成员函数display。3、#includeusingnamespacestd;#includeclassDatepublic:Date()Date(inty,intm,intd);Date(Date&d);voidSetDate(inty,intm,intd);voidShowDate();private:intyear,month,day;);Date:Date(inty,intm,intd)year=y;month=m;day=d;Date:Date(Date&d)year=d.year;month=d.mon

11、th;day=d.day;voidDate:SetDate(inty,intm,intd)year=y;month=m;day=d;voidDate:ShowDate()coutyear年month月day日endl;classTimepublic:Time()Time(inth,intm,ints);Time(Time&t);voidSetTime(inth,intm,ints);voidShowTime();private:inthour,minute,second;);Time:Time(inth,intm,ints)hour=h;minute=m;second=s;Time:Time(

12、Time&t)hour=t.hour;minute=t.minute;second=t.second;voidTime:SetTime(inth,intm,ints)hour=h;minute=m;second=s;voidTime:ShowTime()couthour:minute:secondendl;classPublicationpublic:Publication()Publication(stringtitle,stringname,floatprice,inty,intm,intd);voidinputData();voiddisplay();private:stringtitl

13、e;stringname;floatprice;Datedate;Publication:Publication(stringtitle,stringname,floatprice,inty,intm,intd):title(title),name(name),price(price),date(y,m,d)voidPublication:inputData()coutPleaseinputtitle,name,price,publicationdateofabook:titlenameprice;intyear,month,day;cinyearmonthday;date.SetDate(y

14、ear,month,day);)voidPublication:display()couttitle=titleendl;coutname=nameendl;coutprice=priceendl;coutpage=page;voidBook二inputData()Publication二inputData();coutPleasethepagesofthebook:page;voidBook:display()Publication:display();coutpage=pageendl;classTape:publicPublicationpublic:Tape()Tape(stringt

15、itle,stringname,floatprice,inty,intm,intd,Timeplaytime);voidinputData();voiddisplay();private:Timeplaytime;Tape:Tape(stringtitle,stringname,floatprice,inty,intm,intd,Timeplaytime):Publication(title,name,price,y,m,d),playtime(playtime)voidTape:inputData()Publication二inputData();coutPleasetheplaytimeo

16、fthetape:hourminutesecond;playtime.SetTime(hour,minute,second);voidTape:display()Publication:display();coutplaytime=;playtime.ShowTime();intmain()Bookbook1(教材,C+程序设计”,30.00,2009,6,1,300);book1.display();coutendl;Timetime1(30,10,20);Tapetape1(磁带”,C+程序设计视频”,10.00,2009,8,1,time1);tape1.display();Bookbo

17、ok2;book2.inputData();book2.display();coutendl;Tapetape2;tape2.inputData();tape2.display();return0;3.分别定义教师类Teacher和干部类Cadre,采用多重继承的方式由这两个类派生出新类Teacher_Cadre(教师兼干部类)。要求:(1)在两个基类中都包含姓名、年龄、性别、地址、电话数据成员。(2)在Teacher类中还包含数据成员职称title,在Cadre类中还包含数据成员职务post,在Teacher_Cadre类中还包含数据成员工资wage。(3)对两个基类中的姓名、年龄、性别、地

18、址、电话数据成员用相同的名字,在访问这类数据成员时,指定作用域。(4)在类体中声明成员函数,在类外定义成员函数。(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、地址、电话,然后再用cout语句输出职务和工资。4、#include#includeusingnamespacestd;classTeacherpublic:Teacher(stringnam,inta,chars,stringtit,stringad,stringt);voiddisplay();protected:stringname;intage;cha

19、rsex;stringtitle;stringaddr;stringtel;Teacher:Teacher(stringnam,inta,chars,stringtit,stringad,stringt):name(nam),age(a),sex(s),title(tit),addr(ad),tel(t)voidTeacher:display()coutageageendl;coutsex:sexendl;couttitle:titleendl;coutaddress:addrendl;couttel:telendl;)classCadrepublic:Cadre(stringnam,inta

20、,chars,stringp,stringad,stringt);voiddisplay();protected:stringname;intage;charsex;stringpost;stringaddr;stringtel;);Cadre:Cadre(stringnam,inta,chars,stringp,stringad,stringt):name(nam),age(a),sex(s),post(p),addr(ad),tel(t)voidCadre:display()coutname:nameendl;coutage:ageendl;coutsex:sexendl;coutpost

21、:postendl;coutaddress:addrendl;couttel:telendl;classTeacher_Cadre:publicTeacher,publicCadrepublic:Teacher_Cadre(stringnam,inta,chars,stringtit,stringp,stringad,stringt,floatw);voidshow();private:floatwage;Teacher_Cadre:Teacher_Cadre(stringnam,inta,chars,stringt,stringp,stringad,stringtel,floatw):Tea

22、cher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w)voidTeacher_Cadre:show()Teacher:display();coutpost:Cadre:postendl;)intmain()Teacher_Cadrete_ca(Wang-li,50,f,prof.,president,135BeijingRoad,Shanghai,(021)61234567,1534.5);te_ca.show();return0;)4.按下列要求编写程序。(1)定义一个分数类Score。它有3个数据成员:Chinese/语文课成绩Engl

23、ish/英语课成绩Mathematics/数学课成绩2个构造函数:无参的和带参数的3个成员函数:是否带参数根据需要自定sum()/计算三门课总成绩print()/输出三门课成绩和总成绩modify()修改三门课成绩(2)定义一个学生类Student。它有3个数据成员:Num/学号Name/姓名MyScore/成绩2个构造函数:无参的和带参数的3个成员函数:是否带参数根据需要自定sum()/计算某学生三门课总成绩print()/输出某学生学号、姓名和成绩modify()/修改某学生学号、姓名和成绩(3)在主函数中,先定义一个学生类对象数组,再通过for循环给对象数组赋上实际值,最后输出对象数组个

24、元素的值。5、#include#includeusingnamespacestd;classscore(public:score()(chinese=0;english=0;mathematics=0;)score(floatch,floaten,floatma):chinese(ch),english(en),mathematics(ma)floatsum();voidprint();voidmodify();private:floatchinese;floatenglish;floatmathematics;classstudentpublic:student():myscore(0,0,

25、0)(num=000000000;name=无;student(stringn,stringna,floatm,floatc,floate):num(n),name(na),myscore(m,c,e)floatsum();voidprint();voidmodify();private:stringnum;stringname;scoremyscore;);floatscore:sum()(return(chinese+english+mathematics);)voidscore:print()(cout语文chineseendl;cout英语englishendl;cout数学mathe

26、maticsendl;cout总成绩sum()endl;coutendlendlendl;)voidscore:modify()(cout请输入三门成绩endl;cinchinese;cinenglish;cinmathematics;coutendlendlendl;)floatstudent:sum()(return(myscore.sum();)voidstudent:print()(cout学号:numendl;cout姓名:nameendl;myscore.print();)voidstudent:modify()(cout请输入学号,姓名和成绩:num;cinname;myscor

27、e.modify();)intmain()(studentst3;cout请输入学生信息:endl;for(inti=0;i3;i+)(sti.modify();)for(inti=0;i请输入学号.姓名和成绫;L1小明清输入三门成绩7788请输入学号,姓名相庭责二L4,卜绿清输入三门成线E6776BXD:c+b(4)+exe5.编写一个程序实现小型公司的人员信息管理系统。该公司雇员(employee)包括经理(manager),技术人员(technician)、销售员(salesman)和销售部经理(salesmanager)。要求存储这些人员的姓名、编号、级别、当月薪水,计算月薪并显示全部

28、信息。程序要对所有人员有提升级别的功能。为简单起见,所有人员的初始级别均为1,然后进行升级,经理升为4级,技术人员和销售部经理升为3级,销售员仍为1级。月薪计算办法是:经理拿固定月薪8000元,技术人员按每小时100元领取月薪,销售员按该当月销售额4%提成,销售经理既拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售额的5%0。#include#includeusingnamespacestd;classemployee/虚基类public:employee()coutID;coutname;salary=0;/月薪virtualvoidpay()=0;/月薪计算函数virtualvoidshow()=0;protected:stringname;/姓名intID;/职工编号doublesalary;/月薪);classtechnician:virtualpublicemployee(public:technician()perhour=20;/每小时附加酬金voidpay()couthours;salary=perhour*hours;voidshow()cout技术人员name(编号为ID)本月工资:salaryendl;protected:doublehours;/月工作时数doubl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论