根据下图类之间的继承关系,以及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;
}
};