voidemployee:
:
pay(){
intdays;
cout<<"请输入请假天数:
\n";
cin>>days;
base_salary=Grades[grade]*(23-days)/23;
career_salary=base_salary/2;//普通员工业绩工资为基本工资的一半
salary=base_salary+career_salary;
}
classmanager:
virtualpublicemployee{//虚基类
protected:
doubleprize;//固定奖金额
doublefactor;//业绩系数
public:
manager(string="",int=0,int=0,double=0);
manager(manager&mag);//拷贝构造函数
voidpay();};
manager:
:
manager(manager&mag):
employee(mag){
prize=mag.prize;
factor=mag.factor;}
manager:
:
manager(stringnn,intid,intgr,doublepr):
employee(nn,id,gr){
prize=pr;//固定奖金额
factor=0;}
voidmanager:
:
pay(){
intdays;
cout<<"请输入请假天数:
\n";
cin>>days;
cout<<"请输入业绩系数:
\n";
cin>>factor;
base_salary=Grades[grade]*(23-days)/23;
career_salary=prize*factor*(23-days)/23;
salary=base_salary+career_salary;
}
classtechnician:
virtualpublicemployee{
protected:
doublehours;//月工作时数
doubleperhour;//每小时附加酬金
doubleshfactor;//研究进度系数
public:
technician(string="",int=0,int=0,double=0);
technician(technician&);//拷贝构造函数
voidpay();};
technician:
:
technician(technician&tech):
employee(tech){//拷贝构造函数
hours=tech.hours;//月工作时数
perhour=tech.perhour;//每小时附加酬金
shfactor=tech.shfactor;//研究进度系数
}
technician:
:
technician(stringnn,intid,intgr,doublephr):
employee(nn,id,gr){
hours=0;
perhour=phr;//每小时附加酬金
shfactor=0;}
voidtechnician:
:
pay(){
intdays;
cout<<"请输入请假天数:
\n";
cin>>days;
cout<<"请输入研究进度系数:
\n";
hours=8*(23-days);
cin>>shfactor;
base_salary=Grades[grade]*(23-days)/23;
career_salary=perhour*hours*shfactor*(23-days)/23;
salary=base_salary+career_salary;}
classsalesman:
virtualpublicemployee{
protected:
doubleamount;//销售额
doubleslfactor;//提成比例
public:
salesman(string="",int=0,int=0,double=0);
salesman(salesman&);//拷贝构造函数
voidpay();
};
salesman:
:
salesman(stringnn,intid,intgr,doubleslfac):
employee(nn,id,gr){
amount=0;
slfactor=slfac;}
salesman:
:
salesman(salesman&sale):
employee(sale){
amount=sale.amount;
slfactor=sale.slfactor;}
voidsalesman:
:
pay(){
intdays;
cout<<"请输入请假天数:
\n";
cin>>days;
cout<<"请输入销售额:
\n";
cin>>amount;
base_salary=Grades[grade]*(23-days)/23;
career_salary=amount*slfactor;salary=base_salary+career_salary;}
classdevelopermanager:
publicmanager,publictechnician{
public:
developermanager(string="",intid=0,intgr=0,doublepr=0,doublephr=0);
developermanager(developermanager&);//拷贝构造函数
voidpay();};
developermanager:
:
developermanager(stringnn,intid,intgr,doublepr,doublephr)
:
manager(nn,id,gr,pr),technician(nn,id,gr,phr),employee(nn,id,gr){}
developermanager:
:
developermanager(developermanager&deman)
:
manager(deman),technician(deman),employee(deman){}
voiddevelopermanager:
:
pay(){
intdays;
cout<<"请输入请假天数:
\n";
cin>>days;
cout<<"请输入业绩系数:
\n";
cin>>factor;
cout<<"请输入研究进度系数:
\n";
cin>>shfactor;
hours=8*(23-days);
base_salary=Grades[grade]*(23-days)/23;//基本工资
career_salary=perhour*hours*shfactor*(23-days)/23;//技术人员奖金
career_salary+=prize*factor*(23-days)/23;//加经理业绩工资
career_salary/=2;
salary=base_salary+career_salary;
}
classsalesmanager:
publicmanager,publicsalesman{
public:
salesmanager(string="",int=0,int=0,doublepr=0,doubleslfac=0);
salesmanager(salesmanager&);//拷贝构造函数
voidpay();
};
salesmanager:
:
salesmanager(stringnn,intid,intgr,doublepr,doubleslfac)
:
manager(nn,id,gr,pr),salesman(nn,id,gr,slfac),employee(nn,id,gr){}
salesmanager:
:
salesmanager(salesmanager&salman)
:
manager(salman),salesman(salman),employee(salman){}//拷贝构造函数
voidsalesmanager:
:
pay(){
intdays;
cout<<"请输入请假天数:
\n";
cin>>days;
cout<<"请输入业绩系数:
\n";
cin>>factor;
cout<<"请输入销售额:
\n";
cin>>amount;
base_salary=Grades[grade]*(23-days)/23;//基本工资
career_salary=prize*factor*(23-days)/23;//经理业绩工资
career_salary/=2;
career_salary+=amount*slfactor;//加销售业绩工资
salary=base_salary+career_salary;}
intmain(){
employeeeml1("张伟",10012,0),*emlp;
managermag1("姚婕",20005,4,1000);
techniciantec1("王茜",30047,5,10);
salesmansal1("朱明",40038,2,0.05);
developermanagerdem1("沈俊",50069,6,1500,12);
salesmanagersam1("况钟",60007,3,1000,0.05);
eml1.pay();eml1.show();mag1.pay();
mag1.show();tec1.pay();
tec1.show();sal1.pay();
sal1.show();emlp=&dem1;
emlp->pay();emlp->show();
emlp=&sam1;emlp->pay();
emlp->show();cout<employeeeml0(eml1);
managermag0(mag1);
techniciantec0(tec1);
salesmansal0(sal1);
developermanagerdem0(dem1);
salesmanagersam0(sam1);
cout<<"输出拷贝结果:
"<eml0.show();mag0.show();
tec0.show();sal0.show();
emlp=&dem0;emlp->show();
emlp=&sam0;emlp->show();
return0;}