已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+与数据结构实验报告实验三 类的派生与继承实验目的和要求 1 掌握继承和派生类的概念。 2 掌握派生类对基类的继承。 3 了解多继承。 实验内容 1. 编写一个程序,其中有一个书类book,其数据包括书号、书名、定价、出版社及出版时间:有一个作者类author,其数据成员包括姓名、年龄和写作时间,每个类都有相应的输入输出。以此两个为基类派生出图书查询卡card,并增加一个数据成员表示书籍系统名称,以及一个可以显示系统名称、书名、作者、作者年龄、出版时间、出版社和定价等数据的函数。 2. 设计一个大学的类系统,学校中有学生、教师,每种人员都有自己的特性,他们之间有相同的地方(以 person 类为基类,有姓名、编号),又有各自不同的特性(学生:专业、平均成绩;教师:职称、工资)。利用继承机制定义这个系统中的各个类,要求输入姓名等信息后再将这些信息输出。 实验原理:1、 继承与派生的概念及目的;2、 派生类大的声明方式、构成以及访问属性;3、 多继承的声明方法;4、 含有子对象的派生类的声明方式以及执行顺序;实验内容一:编程思想:编程过程中考虑到过程较为复杂,我采用了分步、分块编程的方法,使得程序的功能逐步地实现。程序的基本框架如下:Time类 book类author类card类第一步:因为考虑到book和author中都需要输入和时间有关的变量,所以将时间作为它们共同的基类,向它们传递时间变量的属性。Time类是一个比较基本的类的建立,在第一章中已经可以较为熟练地掌握。第二步:实现书籍基本信息的输入和输出。此步中用到了继承,因为此类中需要建立出版时间,所以建立了一个Time类的对象:bpubt。在Book类中设计数据的输入输出函数,并在输入输出函数中通过对象bpubt调用时间类的输入输出函数。编程过程中,Book类的功能通过以下代码实现,并检查运行结果无误。#include#include#includeusing namespace std;class Time private: int day; int month; int year;public:Time(int d=0,int m=0,int y=0) day=d; month=m; year=y; void setin() cout请输入时间:daymonthyear; void setout() coutday/month/yearendl; ;class book:public Timeprivate: float bp; int bnum; string bname; string bpubl; Time bpubt;public: void setin() cout请输入书的简单情况:bnumbnamebpbpubl; bpubt.setin(); void setout() coutbnumendl; coutbnameendl; coutbpendl; coutbpublendl; bpubt.setout();int main() book book1; book1.setin(); book1.setout(); system(PAUSE); return 0;运行结果:在编写过程中遇到字符串的输入问题,通过调用头文件#include得以解决。第三步:在编写好Book类以及处理好Book类与Time类之间的关系后,author类的处理就变得比较简单。同样,设计好author类的输入输出函数,在输入输出函数中通过建立Time类writime来调用Time类的输入输出函数。第四步:建立card类,其中包含card类自身的输入输出函数。同时,建立card类和Book类、author类之间的继承、派生关系。在card类中,通过建立Book和author类来实现对于这两个基类的输入输出函数的调用。第五步:建立主函数main(),在主函数中建立card类的对象,并实现对于对象输入输出函数的调用。程序代码:#include#include#includeusing namespace std;class Time private: int day; int month; int year;public:Time(int d=0,int m=0,int y=0) day=d; month=m; year=y; void setin() cout请输入时间:daymonthyear; void setout()coutday/month/yearendl; ;class book:public Timeprivate: float bp; int bnum; string bname; string bpubl; Time bpubt;public: void setin() cout请输入书的简单情况:bnumbnamebpbpubl; bpubt.setin(); void setout() cout书号:bnumendl; cout书名:bnameendl; cout书籍定价:bpendl; cout出版社bpublendl; cout出版时间:; bpubt.setout();class author:public Timeprivate: string aname; int age; Time writime;public: void setin() cout请输入作者的基本情况:anameage; writime.setin(); void setout() cout作者名字:anameendl; cout作者年龄ageendl; cout写作时间:; writime.setout();class card:public book,public authorprivate: string system; book book1; author author1;public: void setin() cout输入系统名称:system; book1.setin(); author1.setin(); void setout() cout系统名称:systemendl; book1.setout(); author1.setout();int main()card card1;card1.setin();card1.setout();system(PAUSE); return 0;运行结果:实验内容二:编程思想:在编完第一题后,第二题已经显得非常简单,我先写出了程序的框架图:Teacher类Person类(虚基类)Student类第一步:建立虚基类person类,并设置纯虚函数setin()、setout(),从而在继承过程中实现C+的多态性。值得注意的是考虑到基类数据成员要被派生类访问,所以将其的访问属性设置为protected。第二步:建立teacher类,并建立它和person类的继承关系,并添加数据成员title和salary。与teacher类类似地建立student类,并添加新的数据major和aeverscore。同时建立他们各自的输入、输出函数。第三步:设置主函数,建立teacher类和student类的对象,并分别调用他们的输入输出函数。程序代码:#include#include#includeusing namespace std;class Person protected: string name; long num; public: virtual void setin()=0; virtual void setout()=0; ;class Teacher:public Person string title; float salary; public: void setin() cout输入老师的信息:namenumtitlesalary; void setout() cout教师姓名:nameendl; cout教师编号:numendl; cout教师职称:titleendl; cout工 资:salaryendl; ; class Student:public Person string major; float averscore; public: void setin() cout输入学生的信息:namenummajoraverscore; void setout() cout学生姓名:nameendl; cout学生编号:numendl; cout专 业:majorendl; cout平均成绩:averscoreendl; ; int main() Teacher teacher1; Student student1; teacher1.setin(); student1.setin(); teacher1.setout(); student1.setout(); system(PAUSE); return 0; 运行结果:编程心得:1、刚刚开始编写第一个程序的时候觉得这个程序好大,每次编译都会出现好多错误,但在分块实现以后,建立了小模块之间的框架,发现这个程序其实也不复杂。2、在第一个程序中,尽管建立了很多的setin()和setout()函数,但因为派生类对于基类同名成员函数的覆盖,使得程序在执行时总是执行最远派生类的同名成员函数。通过setin()和setout()函数,比较深刻地理解到了这一点。3、在编写第二个程序的时候因为已经编过第一个程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026陕西西安西咸泾河泾华学校招聘26人备考题库及完整答案详解
- 2026西南林业大学招聘科研助理48人备考题库及答案详解(基础+提升)
- 2026上半年广东肇庆宣卿中学面向高校招聘中学教师8人备考题库(第二批编制)含答案详解(典型题)
- 社交平台算法优化策略
- 带章交易合同
- 建委存量房交易合同
- 律师函物业服务合同
- 房开打款给物业合同
- 儿科呼吸衰竭的护理质量控制
- 企业员工生日会
- Unit 5 Nature's Temper 单元测试卷-2025-2026学年人教版八年级英语下册
- 2026入团考试必刷170题(含答案解析)高频考点全覆盖
- 进出口贸易合同2026版含关税支付方式二篇
- 2026年记忆力判断力反应力三力测试题库
- 世界小商品之都-解码义乌发展经验与启示课件
- 2024年江苏省常州市中考化学真题(含答案)
- 2026年贵阳市乌当区事业单位招聘笔试参考题库及答案解析
- 2026年及未来5年市场数据中国天然气长输管道行业全景评估及投资规划建议报告
- 2026年成人重症患者持续应用镇静及镇痛药物临床指南更新(完整版)
- 蛋鸡养殖卫生免疫制度
- 寒湿体质万病之源课件
评论
0/150
提交评论