【C++】6-7 学生类(虚基类)分数 10

本文介绍了如何在C++中使用虚基类Data_rec作为基类,派生出Student和Employee类,并结合在职大学生类E_Student,展示了如何定义和测试这些类及其成员函数,包括打印属性和继承特性。
摘要由CSDN通过智能技术生成

6-7 学生类(虚基类)

分数 10

全屏浏览

切换布局

作者 刘利

单位 惠州学院

类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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

class Student:virtual public Data_rec{
protected:
    string major;
    double score;
public:
    Student(string name,char sex,int age,string major,double score):Data_rec(name,sex,age){
        this->major = major;
        this->score = score;
    }
    void prints(){
        cout<<"name:"<<name<<endl;
        cout<<"sex:"<<sex<<endl;
        cout<<"age:"<<age<<endl;
        cout<<"major:"<<major<<endl;
        cout<<"score:"<<score<<endl;
    }
};
class Employee:virtual public Data_rec{
protected:
    string dept;
    double salary;
public:
    Employee(string name,char sex,int age,string dept,double salary):Data_rec(name,sex,age){
        this->dept = dept;
        this->salary = salary;
    }
    void printe(){
        cout<<"name:"<<name<<endl;
        cout<<"sex:"<<sex<<endl;
        cout<<"age:"<<age<<endl;
        cout<<"dept:"<<dept<<endl;
        cout<<"salary:"<<salary<<endl;
    }
};
class E_Student:public Student,public Employee{
public:
    E_Student(string name,char sex,int age,string major,double score,string dept,double salary):Data_rec(name,sex,age),Student(name,sex,age,major,score),Employee(name,sex,age,dept,salary){}
    void print(){
        cout<<"name:"<<name<<endl;
        cout<<"sex:"<<sex<<endl;
        cout<<"age:"<<age<<endl;
        cout<<"major:"<<major<<endl;
        cout<<"score:"<<score<<endl;
        cout<<"dept:"<<dept<<endl;
        cout<<"salary:"<<salary<<endl;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值