6-2 销售经理(多继承/虚基类)

作者 刘利

单位 惠州学院

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

0012.png

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.show();                           
               break;   
        }         
        //2.测试Saleman
        case 2:{
            Saleman sman(num,name,basicSale,personAmount); 
            sman.show();
            break;
        }
        //3.测试Manager
        case 3:{
            Manager m(num,name,basicSale,totalAmount); 
            m.show();
            break;
        }
        //4.测试SaleManager 
        case 4:{
            SaleManager sm(num,name,basicSale,personAmount,totalAmount); // 参数含义依次为编号,姓名,基本工资,个人有销售额,销售总额
            sm.show(); 
            break;
        }
    }    
    return 0;
}

输入样例1:

1234 王兰 2000 8000 20000
1

输出样例1:

num:1234
name:王兰
BasicSale:2000

输入样例2:

1234 王兰 2000 8000 20000
2

输出样例2:

saleman 王兰:8000

输入样例3:

1234 王兰 2000 8000 20000
3

输出样例3:

manager 王兰:20000

输入样例4:

1234 王兰 2000 8000 20000
4

输出样例4:

num:1234
name:王兰
BasicSale:2000
personAmount:8000
totalAmount:20000

--------------------------------------------------------------------------------------------------------------------------------

 答案

#include <iostream>
using namespace std;

#include <string>
class Staff
{
public:
    int num, basicSale;
    string name;
    Staff(int m, string n, int b) : num(m), name(n), basicSale(b) {}
    void show()
    {
        cout << "num:" << num << endl;
        cout << "name:" << name << endl;
        cout << "BasicSale:" << basicSale << endl;
    }
};

class Saleman : virtual public Staff
{
public:
    int personAmount;
    Saleman(int m, string n, int b, int p) : Staff::Staff(m, n, b), personAmount(p) {}
    void show()
    {
        cout << "saleman " << name << ":" << personAmount << endl;
    }
};
class Manager : virtual public Staff
{
public:
    int totalAmount;
    Manager(int m, string n, int b, int t) : Staff::Staff(m, n, b), totalAmount(t) {}
    void show()
    {
        cout << "manager " << name << ":" << totalAmount << endl;
    }
};

class SaleManager : public Manager, public Saleman
{
public:
    SaleManager(int m, string n, int b, int p, int t) : Staff::Staff(m, n, b), Manager(m, n, b, t), Saleman(m, n, b, p) {}
    void show()
    {
        Staff::show();
        cout << "personAmount:" << personAmount << endl;
        cout << "totalAmount:" << totalAmount << endl;
    }
};

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.show();
        break;
    }
          //2.测试Saleman
    case 2: {
        Saleman sman(num, name, basicSale, personAmount);
        sman.show();
        break;
    }
          //3.测试Manager
    case 3: {
        Manager m(num, name, basicSale, totalAmount);
        m.show();
        break;
    }
          //4.测试SaleManager 
    case 4: {
        SaleManager sm(num, name, basicSale, personAmount, totalAmount); // 参数含义依次为编号,姓名,基本工资,个人有销售额,销售总额
        sm.show();
        break;
    }
    }
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值