5.定义Person(人)类,由Person分别派生出Teacher(教师)类和Cadre(干部)类,再由Teacher(教师)类和Cadre(干部)类采用多重继承方式派生出新类TeacherCadre(教师兼干部)类,各类之间的继承关系如图1.1所示。
图2.1 各类之间的继承关系
要求:
(1)在Person类中包含的数据成员有姓名(name)、年龄(age)、性别(sex)。在Teacher类还包含数据成员职称(title),在Cadre类中还包含数据成员职务(post),在TeacherCadre类中还包含数据成员工资(wages)。
(2)在类体中定义成员函数。
(3)每个类都有构造函数与显示信息函数(Show)。
#include<iostream>
using namespace std;
class person{
private:
char *name;
int age;
char sex;
static int len;
public:
person(char *a,int b,char c):age(b),sex(c){
name=a;
}
~person(){}
int getage(){return age;}
char getsex(){return sex;}
char *getname(){
return name;
}
void show(){
cout<<"name:"<<getname();
cout<<"\nage:"<<getage()<<"\nsex:"<<getsex()<<endl;
}
};
class Teacher:public person{
private:
char *title;
public:
Teacher(char *a,int b,char c,char *d):person(a,b,c){
title=d;
}
~Teacher(){}
char *gettitle(){
return title;
}
void show(){
person::show();
cout<<"title:"<<gettitle()<<endl;
}
};
class Cadre:public person{
private:
char *post;
public:
Cadre(char *a,int b,char c,char *d):person(a,b,c){
post=d;
}
~Cadre(){}
char *getpost(){
return post;
}
void show(){
person::show();
cout<<"post:"<<getpost()<<endl;
}
};
class TeacherCadre:virtual public Cadre,public Teacher{
private:
int wages;
char *post;
public:
TeacherCadre(char *a,int b,char c,char *d,char *e,int f):Cadre(a,b,c,e),Teacher(a,b,c,d),wages(f){
post=e;
}
~TeacherCadre(){}
int getwages(){return wages;}
void show(){
Teacher::show();
cout<<"post:"<<Cadre::getpost();
cout<<"\nwages:"<<getwages()<<endl;
}
};
void main()
{
TeacherCadre q("mm",20,'m',"daza","saodi",5000);
q.show();
}