①声明并实现一个名为Person的基类,Person类有保护数据成员name(姓名,string类型)、sex(性别,char类型,'M'表示男,'F'表示女)。以及有参构造函数,将姓名、性别设置为给定的参数;成员函数print,输出姓名和性别。
②从Person类派生出Student类,Student类有私有数据成员status(状态,string类型),表示年级(FRESHMAN、SOPHOMORE、JUNIOR、SENIOR),表示大一、大二、大三、大四学生。以及有参构造函数,将姓名、性别、状态设置为给定的参数;成员函数print,print函数输出姓名、性别和状态。
③定义MyDate类,它包含私有数据成员year、month和day以及带默认参数的有参构造函数,年、月、日的默认参数值分别为1900、1、1;成员函数print,输出年、月、日。
④从Person类派生出Employee类,Employee类有保护数据成员salary(薪水,int类型)、dateHired(雇佣日期),dataHired的类型是MyDate。以及有参构造函数,将姓名、性别、薪水和雇佣日期设置为给定的参数;成员函数print,输出姓名、性别、薪水和雇佣日期。
⑤从Employee类派生出Faculty类,Faculty类有私有数据成员rank(级别,string类型),有(PROFESSOR、ASSOCIATE_PROFESSOR、LECTURER),表示教授、副教授、讲师。以及有参构造函数,将姓名、性别、薪水、雇佣日期和级别设置为给定的参数;成员函数print,输出姓名、性别、薪水、雇佣日期和级别。
⑥从Employee类派生出Staff类,Staff类有私有数据成员headship(职务,string类型),有(PRESIDENT、DEAN、DEPARTMENT_CHAIRMAN),表示校长、院长、系主任。以及有参构造函数,将姓名、性别、薪水、雇佣日期和职务设置为给定的参数;成员函数print,输出姓名、性别、薪水、雇佣日期和职务。
输入输出示例
逐个输入:
Person对象的构造信息
Student的构造信息
Data的构造信息
Employee的构造信息
Faculty的构造信息
Staff的构造信息
其中雇佣日期都使用相同的日期,所以构造一个对象即可
输入 | 输出 | |
示例 1 | ZhangSan M LiSi F FRESHMAN 2012 10 31 WangWu M 5000 LiuLiu M 10000 PROFESSOR QianQi M 8000 DEPARTMENT_CHAIRMAN | Name:ZhangSan, Sex:M Name:LiSi, Sex:F FRESHMAN Name:WangWu, Sex:M Salary:5000, Hire date:2012-10-31 Name:LiuLiu, Sex:M Salary:10000, Hire date:2012-10-31 PROFESSOR Name:QianQi, Sex:M Salary:8000, Hire date:2012-10-31 DEPARTMENT_CHAIRMAN |
//注意:输出要一一对应,好好审题
#include<iostream>
#include<string>
using namespace std;
class Person {
protected:
string name;
char sex;
public:
Person(string na, char se) {
name = na;
sex = se;
}
void print() {
cout << "Name:" << name << ", Sex:" << sex << endl;//输出姓名和性别
}
};
class Student :public Person {
string status;
public:
Student(string na, char se, string sta) :Person(na, se) {
status = sta;
}
void print();
};
void Student::print() //输出姓名,性别和年级
{
Person::print();
cout << status << endl;
}
class MyDate {
int year, month, day;
public:
MyDate(int y = 1900, int m = 1, int d = 1) {
year = y;
month = m;
day = d;
}
void print() {
cout << ", Hire date:" << year << "-" << month << "-" << day<<endl;
}
};
class Employee :public Person {
protected:
int salary;
MyDate dateHired;
public:
Employee(string na1, char se1, int y1, int m1, int d1, int sa) :Person(na1, se1), dateHired(y1, m1, d1) {
salary = sa;
}
void print() //输出姓名,性别,薪水和雇佣日期
{
Person::print();
cout << "Salary:" << salary;
dateHired.print() ;
}
};
class Faculty :public Employee {
string rank;
public:
Faculty(string na2, char se2, int y2, int m2, int d2, int sa1, string ra) :Employee(na2, se2, y2, m2, d2, sa1) {
rank = ra;
}
void print()//输出姓名,性别,薪水、雇佣日期和级别
{
Employee::print();
cout << rank << endl;
}
};
class Staff :public Employee {
string headship;
public:
Staff(string na3, char se3, int y3, int m3, int d3, int sa2, string he) :Employee(na3, se3, y3, m3, d3, sa2) {
headship = he;
}
void print() //输出姓名、性别、薪水、雇佣日期和职务设置
{
Employee::print();
cout << headship << endl;
}
};
int main() {
string na1, na2, na3, na4, na5, sta, ra, he;
char se1, se2, se3, se4, se5;
int y, m, d, sa1, sa2, sa3;
cin >> na1 >> se1 >> na2 >> se2 >> sta >> y >> m >> d >> na3 >> se3 >> sa1 >> na4 >> se4 >> sa2 >> ra >> na5 >> se5 >> sa3 >> he;
Person A(na1, se1);
A.print();//输出姓名和性别
Student B(na2, se2, sta);
B.print();//输出姓名,性别和年级
Employee C(na3, se3, y, m, d,sa1);
C.print();//输出姓名,性别,薪水和雇佣日期
Faculty D(na4, se4, y, m, d,sa2,ra);
D.print();//输出姓名,性别,薪水、雇佣日期和级别
Staff E(na5, se5, y, m, d,sa3,he);
E.print();//输出姓名、性别、薪水、雇佣日期和职务设置
return 0;
}