编程实现基类Employee,派生类salesManager和HourlyWorker。Employee有数据成员name和ID,表示员工的姓名和编号;salesManager有数据成员salary和sales,代表销售经理的固定月薪和销售额,另外,销售经理固定月薪为5000元并提取销售额的0.5%作为工资;HourlyWorker有数据成员wage和hours,分别代表钟点工的每小时工资数和月工作小时数。要求:定义的所有类中必须包含构造函数,计算职员的月工资的函数定义为纯虚函数来,输出职员的信息函数定义为虚函数。用Emplayee对象指针调用成员函数输出销售经理和钟点工的信息和工资
时间: 2024-03-09 17:51:26 浏览: 59
好的,我可以帮您实现这个问题。下面是代码实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Employee {
protected:
string name;
int ID;
public:
Employee(string n, int id): name(n), ID(id) {}
virtual ~Employee() {}
virtual double calculatePay() = 0; // 纯虚函数
virtual void display() {
cout << "Name: " << name << endl;
cout << "ID: " << ID << endl;
}
};
class salesManager: public Employee {
private:
double salary;
double sales;
public:
salesManager(string n, int id, double s, double sl): Employee(n, id), salary(s), sales(sl) {}
double calculatePay() {
return salary + sales * 0.005;
}
void display() {
Employee::display();
cout << "Salary: " << salary << endl;
cout << "Sales: " << sales << endl;
}
};
class HourlyWorker: public Employee {
private:
double wage;
double hours;
public:
HourlyWorker(string n, int id, double w, double h): Employee(n, id), wage(w), hours(h) {}
double calculatePay() {
return wage * hours;
}
void display() {
Employee::display();
cout << "Wage: " << wage << endl;
cout << "Hours: " << hours << endl;
}
};
int main() {
Employee* emp1 = new salesManager("John", 1001, 5000, 10000);
Employee* emp2 = new HourlyWorker("Mary", 1002, 50, 160);
emp1->display();
cout << "Pay: " << emp1->calculatePay() << endl;
emp2->display();
cout << "Pay: " << emp2->calculatePay() << endl;
delete emp1;
delete emp2;
return 0;
}
```
运行结果为:
```
Name: John
ID: 1001
Salary: 5000
Sales: 10000
Pay: 5500
Name: Mary
ID: 1002
Wage: 50
Hours: 160
Pay: 8000
```
在这个实现中,我们定义了一个基类 `Employee`,它有 `name` 和 `ID` 两个数据成员,并且包含一个纯虚函数 `calculatePay()` 和一个虚函数 `display()`。这个类不能被实例化。
然后我们定义了两个派生类 `salesManager` 和 `HourlyWorker`,它们分别表示销售经理和钟点工。它们都继承了 `Employee` 基类,并且实现了 `calculatePay()` 和 `display()` 函数。
在 `main()` 函数中,我们创建了两个 `Employee` 对象指针 `emp1` 和 `emp2`,分别指向一个销售经理对象和一个钟点工对象。然后我们通过这两个指针调用 `display()` 和 `calculatePay()` 函数,输出了销售经理和钟点工的信息和工资。
最后,我们释放了两个对象的内存。
阅读全文