这是我本人在脚摔坏后不能走路在家修养时写的代码,耽误了学校的这节实验课,自己coding一下相当于把实验课补了回来,接下来介绍实验内容
一,实验目的及要求
实验要求:类的继承与派生
设计以下类和函数
1.人员基类Person。其成员包括:
2.派生类1,Teacher,派生与Person。新增成员包括:
数据成员:职称、教研室、所授课程
成员函数:SetTeacher,设置数据
DisplayTeacher,显示数据
3.派生类2,Student,派生与Person。新增成员包括:
数据成员:专业、班级、类别
成员函数:SetStudent,设置数据
DisplayStudent,显示数据
4.派生类3,PostDoctor,多重继承与Student和Teacher。新增成员包括:
数据成员:无
成员函数:SetPostDoctor,设置数据
DisplayPostDoctor,显示数据
5.主函数:输入并输出一个教师、一个本科生、一个博士后数据。
这里需要说明一下,要想搞清楚类的继承与派生就必须搞清楚逻辑关系,读者可以自己画一个逻辑思维图认清类与类之间的根本关系,接下来我就给出我所制作的思维图。
由上图就可以清晰地看出这个程序的思路(图片为本人原创,禁止转载!禁止转载!禁止转载!)
#include
#include
using namespace std;
//基类Person
class Person
{
private:
string name;//名字
string sex;//性别
string age;//年龄
public:
void SetPerson();
void DisplayPerson();
};
//继承于Person类的Teacher类
class Teacher:public Person
{
private:
string ranks;
string room;
string course;
public:
void SetTeacher();
void DisplayTeacher();
};
//继承于Person类的Student类
class Student:public Person
{
private:
string profession;
string class_num;
string class_class;
public:
void SetStudent();
void DisplayStudent();
};
//多重继承,既继承于Student类又继承于Teacher类的PostDoctor类
class PostDoctor: public Student, public Teacher
{
public:
void SetPostDoctor();
void DisplayPostDoctor();
};
void Person::SetPerson()
{
cout<<"==============输入基本人员信息==============="<<endl;
cout<<"姓名:";
cin>> this->name;
cout<<"年龄:";
cin>> this->age;
cout<<"性别:";
cin>> this->sex;
}
void Teacher::SetTeacher()
{
Person::SetPerson();
cout<<"==============输入教师基本信息==============="<<endl;
cout<<"职称:";
cin>> this->ranks;
cout<<"教研室:";
cin>> this->room;
cout<<"所授课程:";
cin>> this->course;
}
void Student::SetStudent()
{
Person::SetPerson();
cout<<"==============输入学生基本信息==============="<<endl;
cout<<"专业:";
cin>> this->profession;
cout<<"班级:";
cin>> this->class_num;
cout<<"类别:";
cin>> this->class_class;
}
void PostDoctor::SetPostDoctor()
{
Student::SetStudent();
}
void Person::DisplayPerson()
{
cout<<"==="<<endl;
cout<<"该人信息如下:"<<endl;
cout<<"姓名:"<<this->name<<endl;
cout<<"性别:"<<this->sex<<endl;
cout<<"年龄:"<<this->age<<endl;
}
void Teacher::DisplayTeacher()
{
Person::DisplayPerson();
cout<<"职称:"<<this->ranks<<endl;
cout<<"教研室:"<<this->room<<endl;
cout<<"所授课程:"<<this->course<<endl;
cout<<"类别:教师"<<endl;
}
void Student::DisplayStudent()
{
Person::DisplayPerson();
cout<<"专业:"<<this->profession<<endl;
cout<<"班级:"<<this->class_num<<endl;
cout<<"类别:"<<this->class_class<<endl;
}
void PostDoctor::DisplayPostDoctor()
{
Student::DisplayStudent();
}
int main()
{
Teacher a;
Student b;
PostDoctor c;
a.SetTeacher();
b.SetStudent();
c.SetPostDoctor();
a.DisplayTeacher();
b.DisplayStudent();
c.DisplayPostDoctor();
return 0;
}
这里的Set/Get方法其实有很多更好的实现方式,而且完全可以用构造函数去处理输入输出,但是因为本人脚疼得一批,实在无心去写更好版本的代码,欢迎大佬们吐槽我这个代码(这个题还是没有太多难度的,要是加入用数据结构知识去处理这些数据的题目要求就好玩了)