//设计一个人物信息描述类,可以分3种级别存储人物信息(普通信息,学生信息,专业学生信息)
//Person,通用人物描述基类,可以存储各职业人物信息。
//Student,学生描述类,可以存储各种学生人物信息。
//Graduate,专业学生描述类,可以存储专业学生人物信息。
//在主函数测试中使用多态方式不同级别的人物信息。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
//创建一个数字基类
#include<iostream>
#include<string>
using namespace std;
// 通用人物描述基类
class Person
{
protected:
int mID; // 编号
string mName; // 名字
string mPart; // 部门/系别
bool mbMale; // 性别
int mAge; // 年龄
public:
Person(int id, const string& name, bool isMale, int age, const string& part);
~Person(){}
virtual void show() const;
};
// 学生描述类
class Student :public Person
{
int mScore; // 分数
public:
Student(int id, const string& name, bool bMale, int age, const string& xibie, int score);
// 实现自己的输出
virtual void show()const;
};
// 老师描述类
class Teacher :public Person
{
string mLevel; // 职称
public:
Teacher(int id, const string& name, bool bMale, int age, const string& bumen, const string& zhicheng);
// 实现自己的输出
virtual void show() const;
};
//-------------Person实现-------------------
Person::Person(int id, const string& name, bool isMale, int age, const string& part)
:mID(id), mName(name), mbMale(isMale), mAge(age), mPart(part)
{
}
void Person::show()const
{
// 输出通用信息
cout << "ID: " << mID << ",";
cout << "名字: "<< mName << ",";
if (mbMale) cout << "男";
else cout << "女";
cout << "," << mAge << "岁";
}
//-------------Student实现-------------------
Student::Student(int id, const string& name, bool bMale, int age, const string& xibie, int score)
:Person(id, name, bMale, age, xibie), mScore(score)// 初始化父类 + 自身变量
{
}
void Student::show() const
{
// 调用父类方法
Person::show();
// 实现自己的输出
cout << ", 系别: " << mPart << ", 分数: " << mScore << endl;
}
//-------------Teacher实现-------------------
Teacher::Teacher(int id, const string& name, bool bMale, int age, const string& bumen, const string& zhicheng)
:Person(id, name, bMale, age, bumen), mLevel(zhicheng)// 初始化父类 + 自身变量
{
}
void Teacher::show() const
{
// 调用父类方法
Person::show();
// 实现自己的输出
cout << ", 部门: " << mPart << ", 职称: " << mLevel << endl;
}
// 多态方法调用
void fun2(Person *person)
{
person->show();
}
//打印输出
int main(void)
{
Student st(2,"李红", false, 18, "电子学", 95);
Teacher gt(5,"王涛", true, 25, "政教处", "副主任");
Person *p[] = { &st, > };
fun2(&st);
fun2(>);
// 暂停
system("pause");
return EXIT_SUCCESS;
}