c++编写一个能计算公司一年支出的程序。 已知某company有员工30人,分三类:WeekWorker每周580¥,MonthWorker月薪每月2500 ¥ ,YearWorker年薪每年22000 ¥ 。 已知有Employee类,有成员函数earning()用于计算Employee一年的收入。在conmpany类中有Employee[]存放公司员工,成员函数salariesPay()计算并打印公司的所有一年薪水之和。 请编写类Company,Employee,WeekWorker,MonthWorker,YearWorker,假定公司三类员工各自的数量用随机数来模拟,打印该公司一年的薪水支出。
时间: 2023-11-28 10:49:09 浏览: 78
好的,以下是完整代码:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class Employee {
public:
virtual int earning() const = 0; // 纯虚函数
};
class WeekWorker : public Employee {
public:
virtual int earning() const {
return 580 * 52;
}
};
class MonthWorker : public Employee {
public:
virtual int earning() const {
return 2500 * 12;
}
};
class YearWorker : public Employee {
public:
virtual int earning() const {
return 22000;
}
};
class Company {
private:
Employee *employees[30];
public:
Company() {
int weekNum = rand() % 11 + 10; // 随机生成10~20个WeekWorker
int monthNum = rand() % 11 + 5; // 随机生成5~15个MonthWorker
int yearNum = 30 - weekNum - monthNum; // 剩下的是YearWorker
for (int i = 0; i < weekNum; i++) {
employees[i] = new WeekWorker();
}
for (int i = weekNum; i < weekNum + monthNum; i++) {
employees[i] = new MonthWorker();
}
for (int i = weekNum + monthNum; i < 30; i++) {
employees[i] = new YearWorker();
}
}
void salariesPay() const {
int sum = 0;
for (int i = 0; i < 30; i++) {
sum += employees[i]->earning();
}
cout << "该公司一年的薪水支出为:" << sum << "元" << endl;
}
~Company() {
for (int i = 0; i < 30; i++) {
delete employees[i];
}
}
};
int main() {
srand(time(NULL)); // 设置随机数种子
Company company;
company.salariesPay();
return 0;
}
```
首先定义了一个抽象类Employee,其中定义了一个纯虚函数earning(),用于计算一年的收入。
然后分别定义了WeekWorker、MonthWorker和YearWorker三个类,它们都是Employee的派生类,分别代表周薪工、月薪工和年薪工,实现了earning()函数以计算一年的收入。
接着定义了Company类,其中有一个Employee类型的数组,用于存放公司员工。在Company的构造函数中,根据题目要求,使用rand()函数随机生成10~20个WeekWorker,5~15个MonthWorker,剩下的是YearWorker,并将它们放入employees数组中。
最后定义了salariesPay()函数,用于计算并打印公司的所有一年薪水之和。在函数中遍历employees数组,调用每个Employee的earning()函数,将所得的收入加起来,最终输出结果。
在main函数中,首先使用srand()函数设置随机数种子,然后创建一个Company对象,调用salariesPay()函数输出结果,最后返回0表示程序正常结束。
阅读全文