【问题描述】继承结构如下图所示。
Person类是公共基类,有三个数据成员name(姓名),sex(性别),age(年龄),Person类的实现代码已经给出。Person有两个派生类Teacher类和Student类,Teacher类新增了一个数据成员title(职称),Student类新增了一个数据成员score(成绩)。请仔细阅读题目,给出的部分源程序以及输入输出要求和样例,实现Teacher类和Student类,并完善Graduate类构造函数的代码。
【输入形式】
见main函数:cin>>name>>sex>>age>>title>>score>>wage>>n;
分别输入姓名,性别,年龄,职称,成绩,工资,构建对象类别
【输出形式】
见main函数。输出对象构建过程以及对象的信息输出。对象信息输出每个信息之间有一个空格
【样例输入】
Lisa
f 25 Assistant 88 1200 3
【样例输出】
Person
constructed
Teacher
constructed
Student
constructed
Graduate
constructed
Lisa
f 25 Assistant 88 1200
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
class Person
{
public:
Person(string nam,char s,int a)
{
name=nam;sex=s;age=a;
cout<<"Person constructed"<<endl;
}
protected:
string name;
char sex;
int age;
};//
class Teacher:virtual public Person
{
public:
Teacher(string nam,char s,int a,string t):Person(nam,s,a),title(t){cout<<"Teacher constructed"<<endl;}
virtual void display(){cout<<name<<" "<<sex<<" "<<age<<" "<<title<<endl;}
protected:
string title;
};
class Student:virtual public Person
{
public:
Student(string nam,char s,int a,double sco):Person(nam,s,a),score(sco){cout<<"Student constructed"<<endl;}
virtual void display(){cout<<name<<" "<<sex<<" "<<age<<" "<<score<<endl;}
protected:
float score;
};//
class Graduate:public Teacher,public Student
{
public:
/**/Graduate(string nam,char s,int a,string t,float sco,float w):Person(nam,s,a),Teacher(nam,s,a,t),Student(nam,s,a,sco),wage(w){cout<<"Graduate constructed"<<endl;}/**/
void display(){cout<<name<<" "<<sex<<" "<<age<<" "<<title<<" "<<score<<" "<<wage<<endl;}
private:
float wage;//工资
};
int main()
{
string name;//姓名
char sex;//性别
int age;//年龄
string title;//职称
float score;//成绩
float wage;//工资
int n;//1 Teacher类 2 Student类 3 Graduate类
Teacher *t1;
Student *s1;
Graduate *g1;
cin>>name>>sex>>age>>title>>score>>wage>>n;
if(n==1)
{
t1=new Teacher(name,sex,age,title);
t1->display();
delete t1;
}
if(n==2)
{
s1=new Student(name,sex,age,score);
s1->display();
delete s1;
}
if(n==3)
{
g1=new Graduate(name,sex,age,title,score,wage);
g1->display();
delete g1;
}
return 0;
}