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

下载本文档

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

文档简介

1、继承与组合时间 2021.03. 10创作:欧阳治一、实验目的1. 了解继承在面向对象程序设计中的重要作用。2. 进一步理解继承与派生的概念。3. 掌握通过继承派生出一个新的类的方法。4. 了解虚基类的作用和用法。5. 掌握类的组合二、实验内容1请先阅读下面的程序,写出程序运行的结果,然 后再上机运行程序,验证自己分析的结果是否正 确。#includc <iostrcam>using namespace std;class Apublic:AO cout<<"A:AQ called.nn;virtual A0coutvv”A:A() cailed.n"

2、;;class B:public Apublic:B(int i)cout<<"B:B() called.n'r;buf=ncw chari;virtual B() delete Qbuf;cout<v”B:BO called.n"private:char *buF;void fun (A *a) cout<<MMay you succecd!n<<cncll;delete a;int mainOA *a=ncw B(15);fun (a);return 0;1、(1) 程序运行结果:A:lAO called.called.

3、May you succeed!B:BO called.A:A。called.#includc<iostrcam>欧阳治创编2021.03.10欧阳治创编 2021.03.10using namespace std;class Apublic:A(int a,int b):x(a),y(b)cout<<HAconstructor"v Vendl; void Add(int a,int b) x+二a;y+二b;void displayO cout<<',(',<<x<<n,<<y<<&

4、quot;)"A。cout<<ndcstructor A.n<<cndl;private:int x,y;;class B:private Aprivate:int i,j;A Aobj;public:B(int a,int b,int c,int d):A(a,b),i(c),j(d),Aobj(l?l) cout<<HB constructor.H<<endl;void Add(int xl ,int yl x2,int y2)A:Add(xl,yl);i+=x2;汁二y2;void displayO A:displayO;Aobj

5、.displayO; cout«n("«i«n,n«j«n)n«cndl;B 0 cout< < "destructor B."<<endl;欧阳治创编2021.03.10欧阳治创编 2021.03.10欧阳治创编2021.03.10欧阳治创编 2021.03.10;int main()B b(l ,2,3,4);b.displayO;b.Add(l ,3,5,7);b.displayO;return 0;(2) 程序运行结果:A constructorA constructor.

6、B constructor.(1,2) (1,1) (3,4)(2,5) (1,1) (8,11)destructor B destructor Adestructor A#includc<iostrcam>using namespace std;class Apublic:A(int a):x(a) cout<<nA constructor.H<<x<<cncll;int f() return +x;A。cout<<ndestructor A.M<<endl;private:int x;欧阳治创编2021.03.10欧阳

7、治创编 2021.03.10欧阳治创编2021.03.10欧阳治创编 2021.03.10;class B:public virtual Aprivate:int y;A Aobj;public:B(int a,int b,int c): A (a) ,y (c), Aob j (c) cout<<nB constructor." <<y<<cndl;int fO A:fO;Aobj.fO;return +y;voiddisplayO cout<<A:fO«ntn«Aobj.fO<<ntn«f(

8、)<<cn dl; BQcout<<"destructor B."<<endl;;class C:public Bpublic:C(inta,int b,int c):B(a,b,c),A(0) cout<<"Cconstructor.H <<cndl;class D:public C,public virtual Apublic:D(int a,int b,int c):C(a,b,c),A(c) cout<<nD constructor"v Vendl;DO cout<&l

9、t;"destructor D."<<endl;;欧阳治创编2021.03.10欧阳治创编 2021.03.10int main()D d(7,8,9);d.FO;d.displayO;return 0;(3) 程序运行结果:A constructor.A constructor.B constructor.®C constructor.D constructor.12 12 11destructor D destructor B destructor Adestructor A(4)#includc <iostrcam> using na

10、mespace std;class Baselpublic:Basel 0cout<<"class Basel!"<<cndl;;class Base2public:Base2Qcout<<nclass Basc2!n<<cndl;class Levell:public Base2,virtual public Basel public:Level If)cout<<nclass Lcvcll!"<<cndl;;class Levcl2: public Basc2,virtual public

11、 Basel public:Level 2()cout<<nclass Lcvel2!H<<cndl;class TopLcvcl:public Level 1 .virtual public Lcvcl2 public:Top Level Qcout<<Hclass TopLcvel!H<<endl;int main()Top Level obj;return 0;(4) 程序运行结果:class Basel!class Basel 2class Level2!class Base2!class Levell!class TopLevel!2.

12、 某出版系统发行图书和磁带,利用继承设计管理 出版物的类。要求如下:建立一个基类Publication 存储出版物的标题title>出版物名称names单价 price及出版日期dateo用Book类和Tape类分别管 理图书和磁带,它们都从Publication类派生。Book 类具有保存图书页数的数据成员page, Tape类具有 保存播放时间的数据成员playtimeo每个类都有构造 函数、析构函数,且都有用于从键盘获取数据的成 员函数inputDasO ,用于显示数据的成员函数 displayOo2、#include <iostrcam> using namespac

13、e std;#include <string>class Datepublic:Daw()Date(int m,int d);Datc(Date &d);void SetDate(int d);void ShowDateO;private:int ycarmonth.day;Date:Datc(int y,int m?int d) year=y;month二m;dayd;Date:Datc(Datc &d) ycar=d.year;month=:cl.month;dayd.day;void Datc:SctDatc(int y,i

14、nt d) yearly;month二m; dayd;void Date:ShowDate0coutvvyuarvv”年"vvrnonthvv” 月"vvdayvv"日n«endl; class Timepublic:TimtOTimc(int h?int mint s);Time(Time &t);void SetTimc(int h?int m,int s);void ShowTimeQ;private:int hour?minutc,second;Timc:Timc(int m,int s) hour二h;minut

15、e=m;second=s;Timc:Timc(Time &t) hour二匚hour;minute二匸minute; second=t.second;void Time:SctTime(int h,int mint s)hour=h; minute二m; sccond=s;voidTime:ShowTimc() cout<<hour<<,:n<<minute<<":"<<sccond<<cn dl;class Publicationpublic:Publication()Publication(

16、string titlestring namcfloat y,int m,int d);void inputDataO;void displayO;private:string title;string name;float price;Date date;Publication:Publication(stringtitle, d):title(title)>namc(namc)>pricc(pricc)>date(y>m>d) void Publication:inpu

17、tDataQ cout<<nPlcasc input title, name, price, publication date of a book:n<<cndl;cin>>titlc>>name>>pricc;int ycarmonth.day;cin> >year>>month > >day; datc.SctDatecarmonth.day);void Publication:displayO cout<<Htitle=n<<titlc<<cndl; cou

18、t<<nname=n<<name<<cndl; cout<<npricc=n<<pricc<<cndl; cout<<ndatc="datc.ShowDatcO;class Book:public Publicationpublic:Book()Book(string titlestring name.float price,int m,int page);void inputDataO;void displayO;private:int page;Book:Book(stri

19、ng tide,string name.float price,int y,int m,int d,int page):Publication(title>name>price>y,m>d) this->page=page; void Book:inputData() Publication:inputDataQ;cout<<nPlcasc the pages of the book:n<<cndl; cin>>pagc;void Book:displayO Publication:displayO; cout<<n

20、pagc=n<<pagc<<cndl;class Tapc:public Publicationpublic:TapcOTape (string title,string namcfloat y,intm,int d,Timc playtime);void inputDataO;void displayO;private:Time playtime;Tape:Tapc(string title,string namefloat y,int m,int d,Timc playtime):Publication(titlc>na

21、me>price>y>m>d)>playtimc(playtime) void Tapc:inputData() Publication:inputData();cout<<nPlcasc the playtime of the tapc:H<<cndl; int hourminutcsccond;cin>>hour>>minute>>sccond; playtimc.SetTimcour.minutcsccond);void Tapc:displayO Publication:displayO; cou

22、t< < nplay time=11; playtimc.ShowTimcO;int main() Book booklf 教 材C+程 序设计”,30.00,2009,6,1,300);bookl.displayO;cout<<cndl;Time timel (30,10,20);Tape tapelf磁带”,”C+程序设计视频",10.00,2009,8,1,timel);tapcl.displayO;Book book2;book2.inputDataQ; book2.display0; cout<<cndl;Tape tapc2;tapc2

23、.inputData(); tapc2.display0; return 0;3. 分别定义教师类Teacher和干部类Cadre,采用多 重继承的方式由这两个类派生出新类Tcachcr_Cadrc (教师兼干部类)。要求:(1) 在两个基类中都包含姓名、年龄、性别、地 址、电话数据成员。(2) 在Teacher类中还包含数据成员职称title,在 Cadre类中还包含数据成员职务post ,在 Teacher_Cadre类中还包含数据成员工资vageo(3) 对两个基类中的姓名、年龄、性别、地址、电 话数据成员用相同的名宇,在访问这类数据成员 时,指定作用域。(4) 在类体中声明成员函数,在

24、类外定义成员函 数。(5) 在派生类Teacher_Cadrc的成员函数show中调 用Teacher类中的display函数,输出姓名、年龄、 性别、地址、电话,然后再用cout语句输出职务和 工资。3、#include<string>#includc <iostrcam>using namespace std;class Teacherpublic:Teachcr(string nam,int a,char s,string tit,string ad,string t);void display0;protected:string name;int age;cha

25、r sex;string title;string addr;string tel;Tcacher:Tcachcr(string namint a,char s,string tit,string 迅string t):name(narn),age(a),sex(s),title(tit),addr(ad)>tel(t) void Teacher:displayOcout<<Hname:n<<namc<<encll; cout<<Hagcn<<agc<<cndl;cout< < "sex: n&

26、lt;< sex<<cndl; cout<<" title:" <<title<<cndl;cout< < Maddress:H< < addr<<cndl; cout<<"tcl:',<<tel<<cndl;class Cadrepublic:Cadre(string nam,int a,char s,string p,string ad,string t); void display0; protected: string na

27、me;int age;char sex;string post;string addr;string tel;Cadrc:Cadrc(string nam,int a,char s,string p,string ad,string t):name(nam),agc(a)>scx(s)?post(p),addr(acl)>tcl(t) void Cadrc:displayO cout< < nname:n < <name< <endl; cout<<nagc:n<<agc<<encll; cout<<

28、;nsex:n<<scx<<endl; cout<<npost:M<<post<<cndl; cout< < naddress:H<<addr<<cndl; cout<<"tcl:n<<tcl<<endl;class Teacher_Cadrc:public Tcachcr.public Cadrepublic:Tcacher_Cadrc(string namint a,char s,string tit,string p,string ad,strin

29、g t,float w);void show();private:float wage;Tcachcr_Cadrc:Tcacher_Cadrc(string a,char s,string string p,string ad,string telfloat w):Teachcr(nam>a>s>t>ad,tcl)>Cadre(nam>a>s>p,ad>tcl)>wage(w) void Teacher_Cadrc:show() Tcacher:displayO; cout<<npost:n<<

30、Cadrc:post<<cndl; cout< < Hwagcs:H< <wagc< <cndl;te_ca(HWang-Bcijingint main()Tcacher_Cadre li”,50,'f7pro£“,”pwsidunt”,”135 Rgd,Shanghai”, ”()21)61234567”534.5);tc_ca.show();return 0;4. 按下列要求编写程序。(1) 定义一个分数类Scoreo它有3个数据成员:Chinese/语文课成绩English英语课成绩Mathematics /数学课成绩2个

31、构造函数:无参的和带参数的3个成员函数:是否带参数根据需要自定sumO/计算三门课总成绩printO/输出三门课成绩和总成绩modifyO/修改三门课成绩(2) 定义一个学生类Studcnto它有3个数据成员:Num/学号Name/姓名MyScorc /成绩2个构造函数:无参的和带参数的3个成员函数:是否带参数根据需要自定sumO/计算某学生三门课总成绩printO输出某学生学号、姓名和成绩modifyO/修改某学生学号、姓名和成绩(3) 在主函数中,先定义一个学生类对象数组,再 通过for循环给对象数组赋上实际值,最后输出对象 数组个元素的值。4、#includc< iostrcam >#include < s tring>using namespace std;class scorepublic:scorc()chincse=();cnglish=();cn.floatcfloat欧阳治创编2021.03.10创编 2021.03.10 mathcmatics=0;score(floatch,floatma):chincsc(ch)>cnglish(cn)>mathcmatics(ma)float sum();void prillt();void modifyO;private:float chincsc;float c

温馨提示

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

评论

0/150

提交评论