根据下图类之间的继承关系,以及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.测试Salemancase 2:{Saleman sman(num,name,basicSale,personAmount); sman.show();cout<<"-------------------"<<endl;sman.Staff::shows();break;}//3.测试Managercase 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;}
};