2.定义Staff(员工)类,由Staff分别派生出Saleman(销售员)类和Manager(经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类,各类之间的继承关系如图1.2所示。
(1)在Staff类中包含的数据成员有编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)和奖金(prize)。在Saleman类中还包含数据成员销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员经理提成比例(totalDeductRate)和总销售额(totalAmount)。在SaleManager类中不包含其它数据成员。
(2)各类人员的实发工资公式如下:
员工实发工资 = 基本工资 + 奖金 * 出勤率
销售员实发工资 = 基本工资 + 奖金 * 出勤率 + 个人销售额 * 销售员提成比例
经理实发工资 = 基本工资 + 奖金 * 出勤率 + 总销售额 * 经理提成比例
销售经理实发工资 =基本工资 + 奖金 * 出勤率 + 个人销售额 * 销售员提成比例+ 总销售额 * 经理提成比例
(3)每个类都有构造函数、输出基本信息函数(Output)和输出实发工资函数(OutputWage)。
#include<iostream>
#include<string>
using namespace std;
class Staff
{
public:
Staff(int nu,char *na,double rf,int bs,int pr)
{
strcpy(name,na);
num=nu;
rateOfattend=rf;
basicSal=bs;
prize=pr;
}
void Output()
{
cout << num << " " << name << " " << rateOfattend << " " << basicSal << " " << prize <<" ";
}
double OutputWage()
{
return (basicSal+prize*rateOfattend);
}
private:
int num;
char name[18];
double rateOfattend;
int basicSal;
int prize;
};
class Salemen:virtual public Staff
{
public:
Salemen(int nu,char *na,double rf,int bs,int pr,double de,double pe):Staff(nu,na,rf,bs,pr)
{
deductRate=de;
personAmount=pe;
}
void Output()
{
Staff::Output();
cout << deductRate << " " << personAmount << " " ;
}
void display()
{
cout << deductRate << " " << personAmount << " " ;
}
double OutputWage()
{
return (Staff::OutputWage()+deductRate*personAmount);
}
private:
double deductRate;
double personAmount;
};
class Manager:virtual public Staff
{
public:
Manager(int nu,char *na,double rf,int bs,int pr,double td,double ta):Staff(nu,na,rf,bs,pr)
{
totalDeductRate=td;
totalAmount=ta;
}
void Output()
{
Staff::Output();
cout << totalDeductRate << " " << totalAmount << " " ;
}
void display()
{
cout << totalDeductRate << " " << totalAmount << " " ;
}
double OutputWage()
{
return (Staff::OutputWage()+totalDeductRate*totalAmount);
}
private:
double totalDeductRate;
double totalAmount;
};
class SaleManager:public Salemen,public Manager
{
public:
SaleManager(int nu,char *na,double rf,int bs,int pr,double de,double pe,double td,double ta):Salemen(nu,na,rf,bs,pr,de,pe),Manager(nu,na,rf,bs,pr,td,ta),Staff(nu,na,rf,bs,pr){}
void Output()
{
Staff::Output();
Salemen::display();
Manager::display();
}
double OutputWage()
{
return (Salemen::OutputWage()+Manager::OutputWage()-Staff::OutputWage());
}
};
void main()
{
Staff S1(1,"李梅",0.9,2000,3000);
S1.Output();
cout<<S1.OutputWage();
cout << endl ;
Salemen S2(2,"蓝帆",0.9,3000,4000,0.1,10000);
S2.Output();
cout<<S2.OutputWage();
cout << endl ;
Manager S3(3,"罗岚",0.9,4000,5000,0.1,20000);
S3.Output();
cout<<S3.OutputWage();
cout << endl ;
SaleManager S4(4,"杨澜",1.0,5000,6000,0.1,10000,0.05,40000);
S4.Output();
cout<<S4.OutputWage();
cout << endl ;
}