新的继承与派生.doc_第1页
新的继承与派生.doc_第2页
新的继承与派生.doc_第3页
新的继承与派生.doc_第4页
新的继承与派生.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论