《实验二--类的继承与派生》由会员分享,可在线阅读,更多相关《实验二--类的继承与派生(11页珍藏版)》请在金锄头文库上搜索。
1、实验二 类的继承与派生一、 实验目的1. 掌握类的声明和使用。2. 掌握对象的声明和使用。3. 掌握具有不同访问属性的成员的访问方式。4. 观察构造函数和析构函数的执行过程。5. 学习声明和使用类的继承关系,声明派生类;6. 熟悉不同继承方式下对基类成员的访问控制;二实验内容1. 设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。具有的属性如下:姓名 char name11、编号char number7、性别char sex3、生日birthday、身份证号
2、charid20。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。在测试程序中声明people 类的对象数组,录入数据并显示。2. 从people(人员)类派生出student(学生)类,添加属性:班号char classNO7;从people 类派生出teacher(教师)类,添加属性:职务char pship11、部门char departt21。从student 类中派生出graduate(研究生)类,添加属性:专业char subject21、导师teacher adviser;从gr
3、aduate 类和teacher 类派生出TA(助教博士生)类,重载相应的成员函数,测试这些类。三 . 实验步骤1. 程序代码第一题#include #include using namespace std; class Date /日期类 private: int year; int month; int day; public: Date() /默认构造 Date(int y,int m,int d) /带参构造 year=y; month=m; day=d; void set() /设置数据函数 cinyearmonthday; void display() /显示函数 coutyear
4、年month月day日; ; class Person /人员类 private:string name;int num; char sex; Date birthday; char ID18; public: Person() /默认构造 Person(int n,int y,int m,int d,char id18,char s=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.bir
5、thday; strcpy(ID,p.ID); void input() /输入函数 cout录入数据:endl; coutname;coutnum; coutsex; cout生日:; birthday.set(); coutID; ID18=0; coutendl; void output() /输出函数 cout编号:numendl; cout姓名:nameendl;cout性别:sexendl; cout生日:; birthday.display(); coutendl; cout身份证号:IDendl; Person() /析构函数 cout num号人员已经录入endl; ; in
6、t main() Person p1; p1.input(); p1.output(); return 0; 第二题#include #include using namespace std; class Date /日期类 private: int year; int month; int day; public: Date() /默认构造 Date(int y,int m,int d) /带参构造 year=y; month=m; day=d; void set() /设置数据函数 cinyearmonthday; void display() /显示函数 coutyear年month月d
7、ay日; ; class Person /人员类 private:string name;int num; char sex10; Date birthday; char ID18; public: Person() /默认构造 Person(int n,int y,int m,int d,char id18,char sex10):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)
8、; void input() /输入函数 coutname;coutnum; coutsex; cout生日:; birthday.set(); coutID; ID18=0; coutendl; void output() /输出函数 cout编号:numendl;cout姓名:nameendl; cout性别:sexendl; cout生日:; birthday.display(); coutendl; cout身份证号:IDendl; Person() /析构函数 /cout num号人员已经录入endl; ; class stduent:public Person char class
9、no7;public:student()cout*endl; void input()Person:input(); cout输入学号classno;void getno()Person:output(); cout学号为:classnoendl;class teacher:public Person char pship11,departt21;public :teacher()cout*endl; void input()Person:input();cout输入职务pship;cout输入部门departt;void inputt()cout输入职务pship;cout输入部门depar
10、tt;void getno()Person:output(); cout职务为:pshipendl;cout部门为:departtendl;void output ()cout职务为:pshipendl;cout部门为:departtendl;class graduate:public stduent char subject21, adviser21;public :graduate() coutendl;void input()stduent:input();cout输入专业:subject;cout输入导师:adviser;void getno() stduent:getno(); co
11、ut专业为:subjectendl; cout导师为:adviserendl;class TA :public graduate,teacherpublic :TA() void input()graduate:input();teacher:inputt();void getno() graduate:getno(); teacher:output(); ;int main() Person p1; stduent s;teacher t;graduate g;TA T;cout请依次输入人员数据信息endl;p1.input();cout请输入学生数据信息;s.input();cout请输入老师数据信息;t.input();cout请输入研究生数据信息;g.input();cout请输入助教博士数据信息; T.input(); cout人员数据信息为:; p1.output()