学生类(虚基类)

本文详细介绍了如何在C++中使用虚基类Data_rec创建Employee和Student派生类,并演示了如何在E_Student类中避免构造函数参数名与系统宏冲突。
摘要由CSDN通过智能技术生成

 

类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

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值