【问题描述】 研究生Graduate既有学生Student的属性,又有教师Teacher的属性,通过多重继承说明一个研究生类Graduate。
从前面实验题目完成的Person类派生出Teacher类,新增专业(dept)和月薪(salary)属性,并定义Teacher类的构造函数初始化新增的数据成员,showMe成员函数显示新增的数据成员的值。
再从Person类派生出Student类,新增班级(class)和学号(ID)属性,定义Student类的构造函数初始化新增的数据成员,showMe成员函数显示新增的数据成员的值。
通过“多重继承”说明一个研究生类Graduate,定义Graduate类的构造函数,定义Graduate类的showMe成员函数显示各个数据成员的值。
主函数设计如下,请勿修改:
int main(){
Graduate stu1(“Lisi”,22,‘m’,“College of Informatics”,2000,“2015013”,“S101”);
stu1.showMe();
return 0;
}
提示: (1)Graduate的父类是Student和Teacher,而Student和Teacher有共同的父类Person,如果是普通继承则姓名、性别和年龄就发生了重复。因此,这一题需要用到虚基类的概念。
(2)注意showMe()成员函数在每个类里都有。
【样例输出】
class: S101 id: 2015013 name: Lisi sex: m age: 22 dept: College of Informatics salary: 2000
代码如下
#include
#include
using namespace std;
class Person {
char name[10];
int age;
char sex;
public:
void Register(char *s, int n, char c) {
strcpy(name,s);
age = n; sex = (c == 'm' ? 0 : 1);
}
char *getName() { return name; }
char getSex() { return sex == 0 ? 'm' : 'f'; }
int getAge() { return age; }
void showMe();
};
class Teacher:virtual public Person
{
public:
Teacher(char* name,int age,char gender,
char* profession,int salary);
void showMe();
char* getdept(){ return dept; }
int getsalary(){ return salary; }
private:
char dept[30];
int salary;
};
class Student:virtual public Person
{
public:
Student(char* name,int age,char gender,
char* stu_id, char* stu_class);
void showMe();
char* getClass(){ return myclass; }
char* getID(){ return ID; }
private:
char myclass[10];
char ID[10];
};
class Graduate:public Teacher,public Student
{
public:
Graduate(char* name,int age,char gender,
char* profession,int salary,
char* stu_class,char* stu_id);
void showMe();
};
Teacher::Teacher(char* name,int age,char gender, char* profession,int salary)
{
Register(name,age,gender);
strcpy(dept,profession);
this->salary = salary;
}
Student::Student(char* name,int age,char gender,char* stu_id, char* stu_class)
{
Register(name,age,gender);
strcpy(myclass,stu_class);
strcpy(ID, stu_id);
}
Graduate::Graduate(char* name,int age,char gender,
char* profession,int salary,
char* stu_id,char* stu_class):Teacher(name,age,gender,profession,salary),Student(name,age,gender,stu_id,stu_class){}
void Person::showMe()
{
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?