根据下图类之间的继承关系,以及main和输出定义,定义Staff类、Saleman类、Manager类和SaleManager类。

Staff类包含的数据成员有编号(num),姓名(name),基本工资(basicSale)。Saleman类包含的数据成员个人有销售额(personAmount),在Manager类中包含的数据成员有销售总额(totalAmount)。在SaleManager中不包含其他数据成员。
函数接口定义:
int main()
裁判测试程序样例:
#include <iostream>
using namespace std;
/* 请在这里填写答案 */
int main()
{
    int num;
    string name;
    int basicSale,personAmount,totalAmount;
    cin>>num>>name>>basicSale>>personAmount>>totalAmount;
    int n;
    //根据n值不同测试不同的类;
    cin>>n;
    switch(n)
    {
        case 1:{
                Staff s(num,name,basicSale); 
                s.shows();                           
               break;   
        }         
        //2.测试Saleman
        case 2:{
            Saleman sman(num,name,basicSale,personAmount); 
            sman.show();
            cout<<"-------------------"<<endl;
            sman.Staff::shows();
            break;
        }
        //3.测试Manager
        case 3:{
            Manager m(num,name,basicSale,totalAmount); 
            m.show();
            cout<<"-------------------"<<endl;
            m.Staff::shows();
            break;
        }
        //4.测试SaleManager 
        case 4:{
            SaleManager sm(num,name,basicSale,personAmount,totalAmount); // 参数含义依次为编号,姓名,基本工资,个人有销售额,销售总额
            sm.show(); 
            cout<<"-------------------"<<endl;
            sm.Saleman::show();
            cout<<"-------------------"<<endl;
            sm.Manager::show();
            cout<<"-------------------"<<endl;
            sm.shows(); 
            break;
        }
    }    
    return 0;
}
 
输入样例1:
1234 王兰 2000 8000 20000
1
输出样例1:
num:1234
name:王兰
BasicSale:2000
输入样例2:
1234 王兰 2000 8000 20000
2
输出样例2:
slaeman 王兰:8000
-------------------
num:1234
name:王兰
BasicSale:2000
输入样例3:
1234 王兰 2000 8000 20000
3
输出样例3:
manager 王兰:20000
-------------------
num:1234
name:王兰
BasicSale:2000
输入样例4:
1234 王兰 2000 8000 20000
4
输出样例4:
num:1234
name:王兰
BasicSale:2000
personAmount:8000
totalAmount:20000
-------------------
slaeman 王兰:8000
-------------------
manager 王兰:20000
-------------------
num:1234
name:王兰
BasicSale:2000注意show()和shows()
// 员工类,表示员工信息
class Staff {
protected:
    int num;            // 员工编号
    string name;        // 员工姓名
    int basicSale;      // 基本工资
public:
    // 构造函数,初始化员工信息
    Staff(int n, const string& nm, int bs) : num(n), name(nm), basicSale(bs) {}
    // 显示员工信息
    void shows() {
        cout << "num:" << num << endl;
        cout << "name:" << name << endl;
        cout << "BasicSale:" << basicSale << endl;
    }
};
// 销售员工类,继承自员工类,表示销售员工信息
class Saleman : virtual public Staff {
public:
    int personAmount;   // 个人销售额
    // 构造函数,初始化销售员工信息
    Saleman(int n, const string& nm, int bs, int pa) : Staff(n, nm, bs), personAmount(pa) {}
    // 显示销售员工信息
    void show() {
        cout << "slaeman " << name << ":" << personAmount << endl;
    }
};
// 经理类,继承自员工类,表示经理信息
class Manager : virtual public Staff {
public:
    int totalAmount;    // 销售总额
    // 构造函数,初始化经理信息
    Manager(int n, const string& nm, int bs, int ta) : Staff(n, nm, bs), totalAmount(ta) {}
    // 显示经理信息
    void show() {
        cout << "manager " << name << ":" << totalAmount << endl;
    }
};
// 销售经理类,同时继承自销售员工类和经理类,表示销售经理信息
class SaleManager : public Saleman, public Manager {
public:
    // 构造函数,初始化销售经理信息
    SaleManager(int n, const string& nm, int bs, int pa, int ta) 
        : Staff(n, nm, bs), Saleman(n, nm, bs, pa), Manager(n, nm, bs, ta) {}
    // 显示销售经理信息
    void show() {
        // 先显示基本信息
        Staff::shows();
        // 再显示个人销售额和销售总额
        cout << "personAmount:" << personAmount << endl;
        cout << "totalAmount:" << totalAmount << endl;
    }
};



















