类Data_rec是虚基类,它包含了所有派生类共有的数据成员,职工类Employee和学生类Student为虚基类Data_rec的派生类,在职大学生类E_Student是职工类Employee和学生类Student的共同派生类。如下图所示:
0011.png
现已定义Data_rec类,请根据main及测试样例输入输出,定义Student,Employee和E_Student类。
函数接口定义:
class Data_rec{
public:
Data_rec(string name1,char sex1,int age1)
{
name=name1;
sex=sex1;
age=age1;
}
protected:
string name;
char sex;
int age;
};
裁判测试程序样例:
#include <iostream>
#include <string>
using namespace std;
class Data_rec{
public:
Data_rec(string name1,char sex1,int age1)
{
name=name1;
sex=sex1;
age=age1;
}
void printd()
{
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"age:"<<age<<endl;
}
protected:
string name;
char sex;
int age;
};
/* 请在这里填写答案 */
int main()
{
string name,major,dept;
char sex;
int age;
double score,salary;
cin>>name>>sex>>age>>major>>score>>dept>>salary;
//1.测试Student
Student s(name,sex,age,major,score);
s.prints();
cout<<endl;
//2.测试Employee
Employee e(name,sex,age,dept,salary);
e.printe();
cout<<endl;
//3.测试E_Student
E_Student my_E_Student(name,sex,age,major,score,dept,salary);
my_E_Student.print();
cout<<endl;
//4.测试虚继承
my_E_Student.printd();
return 0;
}
输入样例:
张大明 f 28 计算机 95 教务处 6000
输出样例:
name:张大明
sex:f
age:28
major:计算机
score:95
name:张大明
sex:f
age:28
dept:教务处
salary:6000
name:张大明
sex:f
age:28
major:计算机
score:95
dept:教务处
salary:6000
name:张大明
sex:f
age:28
// 学生类,继承自 Data_rec 虚基类,包含了专业和成绩这些特有的数据成员
class Student : virtual public Data_rec {
public:
// 构造函数,用于初始化姓名、性别、年龄、专业和成绩
Student(string name1, char sex1, int age1, string major1, double score1)
: Data_rec(name1, sex1, age1), mjor(major1), score(score1) {}
// 成员函数,用于打印学生的信息,包括姓名、性别、年龄、专业和成绩
void prints() {
cout << "name:" << name << endl;
cout << "sex:" << sex << endl;
cout << "age:" << age << endl;
cout << "major:" << mjor << endl;
cout << "score:" << score << endl;
}
protected:
string mjor; // 专业
double score; // 成绩
};
// 职工类,继承自 Data_rec 虚基类,包含了部门和薪水这些特有的数据成员
class Employee : virtual public Data_rec {
public:
// 构造函数,用于初始化姓名、性别、年龄、部门和薪水
Employee(string name1, char sex1, int age1, string dept1, double salary1)
: Data_rec(name1, sex1, age1), dept(dept1), salary(salary1) {}
// 成员函数,用于打印职工的信息,包括姓名、性别、年龄、部门和薪水
void printe() {
cout << "name:" << name << endl;
cout << "sex:" << sex << endl;
cout << "age:" << age << endl;
cout << "dept:" << dept << endl;
cout << "salary:" << salary << endl;
}
protected:
string dept; // 部门
double salary; // 薪水
};
// 职工学生类,继承自学生类和职工类
class E_Student : public Student, public Employee {
public:
// 构造函数,用于初始化姓名、性别、年龄、专业、成绩、部门和薪水
E_Student(string name1, char sex1, int age1, string major1, double score1, string dept1, double salary1)
: Data_rec(name1, sex1, age1), Student(name1, sex1, age1, major1, score1), Employee(name1, sex1, age1, dept1, salary1) {}
// 成员函数,用于打印职工学生的信息,包括姓名、性别、年龄、专业、成绩、部门和薪水
void print() {
cout << "name:" << name << endl;
cout << "sex:" << sex << endl;
cout << "age:" << age << endl;
cout << "major:" << mjor << endl;
cout << "score:" << score << endl;
cout << "dept:" << dept << endl;
cout << "salary:" << salary << endl;
}
};
构造函数 Student
中的参数名 major
与系统定义的宏 major
产生了冲突,导致了错误。为了解决这个冲突,将参数名 major
改成其他名字,如题中的mjor