用C++编写一个能计算公司一年支出的程序。 已知某company有员工30人,分三类:WeekWorker每周580¥,MonthWorker月薪每月2500 ¥ ,YearWorker年薪每年22000 ¥ 。 已知有Employee类,有成员函数earning()用于计算Employee一年的收入。在conmpany类中有Employee[]存放公司员工,成员函数salariesPay()计算并打印公司的所有一年薪水之和。 请编写类Company,Employee,WeekWorker,MonthWorker,YearWorker,假定公司三类员工各自的数量用随机数来模拟,打印该公司一年的薪水支出。且int main() { Company co; for(int i=0;i<30;i++) { int r=rand()%3+1; switch (r) { case 1: co.emp[i]=WeekWorker(580); break; case 2: co.emp[i]=MonthWorker(2500); break; case 3: co.emp[i]=YearWorker(22000); break; default: break; } } cout<<"company total pay="<<co.salarypay(); return 0; }
时间: 2024-03-27 20:40:59 浏览: 47
好的,下面是完整的代码实现:
```
#include <iostream>
#include <cstdlib>
using namespace std;
class Employee {
public:
virtual int earning() = 0;
};
class WeekWorker : public Employee {
public:
WeekWorker(int pay) : pay_(pay) {}
virtual int earning() {
return pay_ * 52;
}
private:
int pay_;
};
class MonthWorker : public Employee {
public:
MonthWorker(int pay) : pay_(pay) {}
virtual int earning() {
return pay_ * 12;
}
private:
int pay_;
};
class YearWorker : public Employee {
public:
YearWorker(int pay) : pay_(pay) {}
virtual int earning() {
return pay_;
}
private:
int pay_;
};
class Company {
public:
Company() {
for (int i = 0; i < 30; i++) {
int r = rand() % 3 + 1;
switch (r) {
case 1:
emp[i] = new WeekWorker(580);
break;
case 2:
emp[i] = new MonthWorker(2500);
break;
case 3:
emp[i] = new YearWorker(22000);
break;
default:
break;
}
}
}
~Company() {
for (int i = 0; i < 30; i++) {
delete emp[i];
}
}
int salarypay() {
int total = 0;
for (int i = 0; i < 30; i++) {
total += emp[i]->earning();
}
return total;
}
Employee* emp[30];
};
int main() {
Company co;
cout << "company total pay=" << co.salarypay() << endl;
return 0;
}
```
这段代码实现了Company、Employee、WeekWorker、MonthWorker和YearWorker这5个类,其中Employee是抽象类,定义了earning()函数,用于计算员工的一年收入。WeekWorker、MonthWorker和YearWorker分别表示按周、按月和按年计算工资的员工,它们都继承自Employee类并实现了earning()函数。
在Company类中,我们使用一个Employee*类型的数组emp来存储所有员工的指针,它的大小为30。在Company类的构造函数中,我们使用rand()函数来生成随机数r,根据r的值来随机生成不同类型的员工。同时,在Company类的析构函数中,我们需要释放所有员工所占用的内存空间,避免内存泄漏。
最后,在main函数中,我们创建了一个Company类的对象co,并输出公司的总工资。
阅读全文