您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 实验二--类的继承与派生
实验二类的继承与派生一、实验目的1.掌握类的声明和使用。2.掌握对象的声明和使用。3.掌握具有不同访问属性的成员的访问方式。4.观察构造函数和析构函数的执行过程。5.学习声明和使用类的继承关系,声明派生类;6.熟悉不同继承方式下对基类成员的访问控制;二.实验内容1.设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。具有的属性如下:姓名charname[11]、编号charnumber[7]、性别charsex[3]、生日birthday、身份证号charid[20]。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。在测试程序中声明people类的对象数组,录入数据并显示。2.从people(人员)类派生出student(学生)类,添加属性:班号charclassNO[7];从people类派生出teacher(教师)类,添加属性:职务charpship[11]、部门chardepartt[21]。从student类中派生出graduate(研究生)类,添加属性:专业charsubject[21]、导师teacheradviser;从graduate类和teacher类派生出TA(助教博士生)类,重载相应的成员函数,测试这些类。三.实验步骤1.程序代码第一题#includeiostream#includestringusingnamespacestd;classDate//日期类{private:intyear;intmonth;intday;public:Date(){}//默认构造Date(inty,intm,intd)//带参构造{year=y;month=m;day=d;}voidset()//设置数据函数{cinyearmonthday;}voiddisplay()//显示函数{coutyear年month月day日;}};classPerson//人员类{private:stringname;intnum;charsex;Datebirthday;charID[18];public:Person(){}//默认构造Person(intn,inty,intm,intd,charid[18],chars='m'):birthday(y,m,d){num=n;sex=s;strcpy(ID,id);}//有默认值的带参构造Person(Person&p)//拷贝构造{name=p.name;num=p.num;sex=p.sex;birthday=p.birthday;strcpy(ID,p.ID);}voidinput()//输入函数{cout录入数据:endl;cout姓名:;cinname;cout编号:;cinnum;cout性别(m/f):;cinsex;cout生日:;birthday.set();cout身份证号:;cinID;ID[18]='\0';coutendl;}voidoutput()//输出函数{cout编号:numendl;cout姓名:nameendl;cout性别:sexendl;cout生日:;birthday.display();coutendl;cout身份证号:IDendl;}~Person()//析构函数{coutnum号人员已经录入endl;}};intmain(){Personp1;p1.input();p1.output();return0;}第二题#includeiostream#includestringusingnamespacestd;classDate//日期类{private:intyear;intmonth;intday;public:Date(){}//默认构造Date(inty,intm,intd)//带参构造{year=y;month=m;day=d;}voidset()//设置数据函数{cinyearmonthday;}voiddisplay()//显示函数{coutyear年month月day日;}};classPerson//人员类{private:stringname;intnum;charsex[10];Datebirthday;charID[18];public:Person(){}//默认构造Person(intn,inty,intm,intd,charid[18],charsex[10]):birthday(y,m,d){num=n;strcpy(ID,id);}//有默认值的带参构造Person(Person&p)//拷贝构造{name=p.name;num=p.num;birthday=p.birthday;strcpy(ID,p.ID);}voidinput()//输入函数{cout姓名:;cinname;cout编号:;cinnum;cout性别(男/女):;cinsex;cout生日:;birthday.set();cout身份证号:;cinID;ID[18]='\0';coutendl;}voidoutput()//输出函数{cout编号:numendl;cout姓名:nameendl;cout性别:sexendl;cout生日:;birthday.display();coutendl;cout身份证号:IDendl;}~Person()//析构函数{//coutnum号人员已经录入endl;}};classstduent:publicPerson{charclassno[7];public:student(){cout*************endl;}voidinput(){Person::input();cout输入学号endl;cinclassno;}voidgetno(){Person::output();cout学号为:classnoendl;}};classteacher:publicPerson{charpship[11],departt[21];public:teacher(){cout***********endl;}voidinput(){Person::input();cout输入职务endl;cinpship;cout输入部门endl;cindepartt;}voidinputt(){cout输入职务endl;cinpship;cout输入部门endl;cindepartt;}voidgetno(){Person::output();cout职务为:pshipendl;cout部门为:departtendl;}voidoutput(){cout职务为:pshipendl;cout部门为:departtendl;}};classgraduate:publicstduent{charsubject[21],adviser[21];public:graduate(){coutendl;}voidinput(){stduent::input();cout输入专业:endl;cinsubject;cout输入导师:endl;cinadviser;}voidgetno(){stduent::getno();cout专业为:subjectendl;cout导师为:adviserendl;}};classTA:publicgraduate,teacher{public:TA(){}voidinput(){graduate::input();teacher::inputt();}voidgetno(){graduate::getno();teacher::output();}};intmain(){Personp1;stduents;teachert;graduateg;TAT;cout请依次输入人员数据信息endl;p1.input();cout请输入学生数据信息;s.input();cout请输入老师数据信息;t.input();cout请输入研究生数据信息;g.input();cout请输入助教博士数据信息;T.input();cout人员数据信息为:;p1.output();cout学生数据信息为:;s.getno();cout老师信息为:;t.getno();cout研究生信息为:;g.getno();cout助教博士信息为:T.getno();}2.调试程序第一次调试,发现没有名字的显示。后来依照其他属性的格式,在相应的位置添加了相关的语句。比如cout姓名:;cinname;再比如cout姓名:nameendl;cout性别:sexendl;3.运行程序运行结果截图图一四.实验小结通过这次实习,我掌握了很多,C++看似和C语言没什么区别其实差别很大。一个是面向过程的,一个是面向对象的。所以以后我们应该好好的学习c++。而且c++的继承派生问题也很难需要自己多多的实践和看书。
本文标题:实验二--类的继承与派生
链接地址:https://www.777doc.com/doc-4263754 .html