继承练习1
①声明并实现一个名为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的构造信息
其中雇佣日期都使用相同的日期,所以构造一个对象即可
#include<iostream>
using namespace std;
class Person
{
public:
void print1()
{
cout<<"Name:"<<Name<<", Sex:"<<sex<<endl;
}
Person(string Name_,char sex_)
{
Name=Name_;
sex=sex_;
}
protected:
string Name;
char sex;
};
class Student:public Person
{
public:
Student(string Name_,char sex_,string status_):Person(Name_,sex_)
{
status=status_;
}
void print2()
{
print1();
cout<<status<<endl;
}
private:
string status;
};
class MyDate
{
public:
void print3()
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
MyDate(int year_,int month_,int day_)
{ year=year_;
month=month_;
day=day_;
}
private:
int year;
int month;
int day;
};
class Employee:public Person
{
public:
void print4()
{
print1();
cout<<"Salary:"<<salary;
cout<<", Hire date:";dateHired.print3();
}
Employee(string Name_,char sex_,int salary_,int year_,int month_,int day_):dateHired( year_, month_,day_),Person(Name_,sex_)
{
salary=salary_;
}
protected:
int salary;
MyDate dateHired;
};
class Faculty:public Employee
{
public:
Faculty(string Name_,char sex_,int salary_,string rank_,int year_,int month_,int day_):
Employee(Name_,sex_,salary_,year_,month_,day_)
{
rank=rank_;
}
void print5()
{
print4();cout<<rank<<endl;
}
private:
string rank;
string Name;
};
class Staff:public Employee
{
public:
Staff(string Name_,char sex_,int salary_,string headship_,int year_,int month_,int day_):Employee(Name_,sex_,salary_,year_,month_,day_)
{
headship=headship_;
}
void print6()
{
print4();cout<<headship<<endl;
}
private:
string headship;
};
int main()
{
string name1,name2,status2,name3,rank1,headship1,name4;
char sex1,sex2,sex3,sex4;
int year,month,day,salary1,salary2;
cin>>name1>>sex1;
Person a1(name1,sex1);
cin>>name2>>sex2>>status2;
Student a2(name2,sex2,status2);
cin>>year>>month>>day>>name3>>sex3>>salary1;
Employee a3(name3,sex3,salary1,year,month,day);
cin>>name3>>sex3>>salary1>>rank1;
Faculty a4(name3,sex3,salary1,rank1,year,month,day);
cin>>name4>>sex4>>salary2>>headship1;
Staff a5(name4,sex4,salary2,headship1,year,month,day);
a1.print1();a2.print2();a3.print4(); a4.print5(); a5.print6();
}
输入 | 输出 | |
示例 1 | | |