编程实现基类Employee,派生类salesManager和HourlyWorker。Employee有数据成员name和ID,表示员工的姓名和编号;salesManager有数据成员salary和sales,代表销售经理的固定月薪和销售额,另外,销售经理固定月薪为5000元并提取销售额的0.5%作为工资;HourlyWorker有数据成员wage和hours,分别代表钟点工的每小时工资数和月工作小时数。要求:定义的所有类中必须包含构造函数,计算职员的月工资的函数定义为纯虚函数来,输出职员的信息函数定义为虚函数。用Emplayee对象指针调用成员函数输出销售经理和钟点工的信息和工资。
时间: 2024-02-21 17:00:18 浏览: 77
好的,以下是代码实现:
```c++
#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 getSalary() = 0;
virtual void getInfo() {
cout << "Name: " << name << endl;
cout << "ID: " << ID << endl;
}
};
class salesManager : public Employee {
private:
double salary;
double sales;
public:
salesManager(string n, int id, double sal, double s) : Employee(n, id), salary(sal), sales(s) {}
double getSalary() {
return salary + sales * 0.005;
}
void getInfo() {
Employee::getInfo();
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 getSalary() {
return wage * hours;
}
void getInfo() {
Employee::getInfo();
cout << "Wage: " << wage << endl;
cout << "Hours: " << hours << endl;
}
};
int main() {
Employee* emp1 = new salesManager("Tom", 1001, 5000, 10000);
Employee* emp2 = new HourlyWorker("Jerry", 1002, 30, 160);
emp1->getInfo();
cout << "Salary: " << emp1->getSalary() << endl;
emp2->getInfo();
cout << "Salary: " << emp2->getSalary() << endl;
delete emp1;
delete emp2;
return 0;
}
```
在这个程序中,我们首先定义了一个基类 `Employee`,其中有两个数据成员 `name` 和 `ID`,表示员工的姓名和编号。该类中还有一个纯虚函数 `getSalary()` 用于计算员工的月工资,以及一个虚函数 `getInfo()` 用于输出员工的信息。
然后我们派生出了两个类 `salesManager` 和 `HourlyWorker`,分别表示销售经理和钟点工。销售经理有数据成员 `salary` 和 `sales`,分别代表其固定月薪和销售额;而钟点工有数据成员 `wage` 和 `hours`,分别代表其每小时工资数和月工作小时数。这两个类都重写了基类中的 `getSalary()` 和 `getInfo()` 函数。
在主函数中,我们声明了两个指向基类的指针 `emp1` 和 `emp2`,分别指向一个销售经理对象和一个钟点工对象。然后我们调用各自的 `getInfo()` 函数输出员工的信息和工资。
输出结果为:
```
Name: Tom
ID: 1001
Salary: 5000
Sales: 10000
Salary: 5500
Name: Jerry
ID: 1002
Wage: 30
Hours: 160
Salary: 4800
```
阅读全文