在工人类Worker基础上,派生出两个类:PieceWorker计件工人和HourWorker计时工人。 在PieceWorker中添加数据成员piece件数(整数),假设完成每件的报酬20元,并根据piece计算薪水。 在HourWorker中添加数据成员hour计时数(浮点数),假设每个工作时的报酬50元,并根据hour计算薪水。 Worker类中已有纯虚函数GetSalary()返回工人薪水,在派生类继承实现计件和计时工人的薪水获取函数。 工人自动编号,从1开始。给工人发奖金,金额为float。
时间: 2023-06-04 21:08:37 浏览: 137
PieceWorker和HourWorker派生类中的GetSalary()函数实现如下:
PieceWorker的GetSalary()函数:
float GetSalary(){
return piece * 20;
}
HourWorker的GetSalary()函数:
float GetSalary(){
return hour * 50;
}
对于给工人发奖金的功能,可以在Worker类中添加一个SetBonus()函数,具体实现如下:
void SetBonus(float bonus){
this->bonus = bonus;
}
在这个函数中,将参数bonus赋值给Worker类中的数据成员bonus。
然后,在PieceWorker和HourWorker派生类中分别重写SetBonus()函数,具体实现如下:
PieceWorker的SetBonus()函数:
void SetBonus(float bonus){
this->bonus = bonus;
salary += bonus;
}
在这个函数中,先调用Worker类中的SetBonus()函数将参数bonus赋值给数据成员bonus,然后再将bonus加到计算出来的薪水salary中。
HourWorker的SetBonus()函数:
void SetBonus(float bonus){
this->bonus = bonus;
salary += bonus;
}
和PieceWorker的实现一致,也是先调用父类的SetBonus()函数将bonus赋值给数据成员bonus,然后将bonus加到计算出来的薪水salary中。
最后,给每个工人对象分别调用SetBonus()函数即可发放奖金。
阅读全文