




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验四继承与派生(二)(多重继承与虚基类)班级:计算机1101 姓名:* 学号:2011*【实验目的】1. 了解多重继承的概念。2. 理解为了避免同一基类出现多个重复的副本而采用的虚基类概念和虚拟继承。3. 学习利用虚基类解决二义性问题。【实验内容】 设计一个用于人事管理的people(人员类)基类。考虑到通用性,仅只抽象出所有类型人员都具有的属性:编号、姓名、性别、出生日期、身份证号等;从people累类派生出student(学生类),并添加属性:班号classno;从people类派生出teacher(教师类),并添加属性:职务pricipalship、部门department;从student类在派生出graduate(研究生类),添加属性:专业subject、导师adviser(teacher类);最后从教师类和研究生类一起派生出TA(助教类)。设计师应注意虚基类的使用,注意重载相应的成员函数,然后测试这些类。【UML图】【实验程序】#include#includeusing namespace std;class Dateprivate:int d_year;int d_month;int d_day;public:Date(int y=0,int m=0,int d=0):d_year(y),d_month(m),d_day(d)void set(int y,int m,int d)d_year=y;d_month=m;d_day=d;void show()cout出生日期:d_year-d_month-d_dayendl;class peopleprotected:Date m_date;long m_no;string m_ident_no;string m_name;string m_sex;public:people(long no,string name,string sex,string ident_no,Date date);people(people &p);void set(long no,string name,string sex,string ident_no,Date date);void set(people &p);void show();people:people(long no,string name,string sex,string ident_no,Date date):m_date(date)m_no=no;m_name=name;m_sex=sex;m_ident_no=ident_no;people:people(people &p)m_no=p.m_no;m_name=p.m_name;m_sex=p.m_sex;m_ident_no=p.m_ident_no;m_date=p.m_date;void people:set(long no,string name,string sex,string ident_no,Date date)m_no=no;m_name=name;m_sex=sex;m_ident_no=ident_no;m_date=date;void people:set(people &p)m_no=p.m_no;m_name=p.m_name;m_sex=p.m_sex;m_ident_no=p.m_ident_no;m_date=p.m_date;void people:show()cout序号:m_noendl;cout姓名:m_nameendl;cout性别:m_sexendl;cout系统编号:m_ident_noendl;m_date.show();class student:virtual public peopleprotected: string s_classno;public:student(people &p,string classno);/student(long no,string name,string sex,string ident_no,Date date,string classno):people(no,name,sex,ident_no,date)s_classno=classno;student(student &s);void show();student:student(people &p,string classno):people(p)s_classno=classno;student:student(student &s):people(s)s_classno=s.s_classno; void student:show()people:show();cout班号:s_classnoendl;class teacher:virtual public peopleprotected:string t_pricipleship;string t_department;public:friend class graduate;teacher(people &p,string pricipleship,string department);/teacher(long no,string name,string sex,string ident_no,Date date,string pricipleship,string department):people(no,name,sex,ident_no,date)t_pricipleship=pricipleship;t_department=department;teacher(teacher &t);void show();teacher:teacher(people &p,string pricipleship,string department):people(p)t_pricipleship=pricipleship;t_department=department;teacher:teacher(teacher &t):people(t)t_pricipleship=t.t_pricipleship;t_department=t.t_department;void teacher: show()people:show();cout职务:t_pricipleshipendl;cout部门:t_departmentendl;class graduate:public studentprotected:string g_subject;teacher g_adviser;public:graduate(student &s1,string subject,teacher & t1);/graduate(long no,string name,string sex,string ident_no,Date date,string classno,string subject,teacher adviser):people(no,name,sex,ident_no,date),student(no,name,sex,ident_no,date,classno),g_adviser(adviser)g_subject=subject;graduate(graduate &g);void show();graduate:graduate(student &s1,string subject,teacher &t1):people(s1),student(s1),g_adviser(t1)g_subject=subject;graduate:graduate(graduate &g):people(g),student(g),g_adviser(g.g_adviser)g_subject=g.g_subject;void graduate:show()student:show();cout项目:g_subjectendl;cout导师信息:endl-endl;g_adviser.show();class TA:public graduate,public teacherpublic:TA(graduate &g,teacher &t);/TA(long no,string name,string sex,string ident_no,Date date,string classno,string subject,teacher adviser,string pricipleship,string department):people(no,name,sex,ident_no,date),graduate(no,name,sex,ident_no,date,classno,subject,adviser),teacher(no,name,sex,ident_no,date,pricipleship,department)TA(TA &T);void show();TA:TA(graduate &g,teacher &t):people(g),graduate(g),teacher(t)/此处不需要给中间类赋值TA:TA(TA &T):people(T),graduate(T),teacher(T)void TA:show()graduate:show();cout职务:t_pricipleshipendl;cout部门:t_departmentendl;void main()Date d(2012,4,20);people p(2011,xiaozi,Man,42032219920227,d);student s(p,1104);/student s(2011,xiaozi,Man,42032219920227,d,1104);/teacher t(1101,Mr Li,Man,1908147679,d,讲师,research);teacher t(p,讲师,research);graduate g(s,computer,t);/TA T(2011,xiaozi,Man,42032219920227,d,1104,computer,t,assistant,teaching);TA T(g,t);cout 欢迎进入信息统计中心,以下将是您所需的全部信息,请查收:endlendlendl;cout*endl;cout基类信息表:endl;T.people:show();cout*endl学生类信息表:endl;T.student:show();cout*endl老师类信息表:endl;T.teacher:show();cout*endl研究生类信息表:endl;T.graduate:show();cout*endl助教类信息表:endl;T.show();coutendl*endl;【实验小结】 一个类可以在一个类族中既被用作虚基类,也被用作非虚基类。 在派生类的对象中,同名的虚基类只产生一个虚基类子对象,而某个非虚基类产生各自的子对象 虚基类子对象是由最派生类的构造函数通过调用虚基类的构造函数进行初始化的。 派生类的构造函数的成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业高中班主任工作总结
- 养老服务活动策划方案模板
- 嘉善洁净车间施工方案
- 活动策划方案标准化执行清单
- 2025辅警招聘考试全真模拟模拟题及参考答案详解【夺分金卷】
- 自考专业(工商企业管理)题库试题带答案详解(培优B卷)
- 2024年安全员考试高频难、易错点题附完整答案详解(考点梳理)
- 高职单招模拟试题含完整答案详解(夺冠系列)
- 2024-2025学年自考专业(金融)题库检测试题打印含答案详解【达标题】
- 2024-2025学年度自考专业(汉语言文学)高频难、易错点题及答案详解【真题汇编】
- 班组长岗位安全培训课件
- 剖宫产术后腹胀护理
- 前列腺增生科普课件
- 项目部商务管理办法
- 2025重庆医科大学附属第一医院(编制外)招聘18人考试参考试题及答案解析
- 精麻药品培训知识课件
- 2025细胞与基因治疗科研领域蓝皮书
- 2025年财务核算招聘笔试模拟题
- 人教版四年级上册第一单元1.6《算盘》课时练(含答案)
- 2025年高考语文全国二卷真题拓展:语言文字运用“衔接+感情色彩+关联词语+错别字”
- 2025年司法考试题库(附答案)
评论
0/150
提交评论