编程实现基类Employee,派生类salesManager和HourlyWorker。Employee有数据成员name和ID,表示员工的姓名和编号;salesManager有数据成员salary和sales,代表销售经理的固定月薪和销售额,另外,销售经理固定月薪为5000元并提取销售额的0.5%作为工资;HourlyWorker有数据成员wage和hours,分别代表钟点工的每小时工资数和月工作小时数。要求:定义的所有类中必须包含构造函数,计算职员的月工资的函数定义为纯虚函数来,输出职员的信息函数定义为虚函数。用Emplayee对象指针调用成员函数输出销售经理和钟点工的信息和工资。
时间: 2024-02-23 08:02:06 浏览: 31
以下是实现基类Employee,派生类SalesManager和HourlyWorker的代码示例:
```C++
#include <iostream>
#include <string>
using namespace std;
class Employee {
protected:
string name;
int ID;
public:
Employee(string n, int i) : name(n), ID(i) {}
virtual double getSalary() = 0;
virtual void printInfo() {
cout << "Name: " << name << endl;
cout << "ID: " << ID << endl;
}
};
class SalesManager : public Employee {
private:
double salary;
double sales;
public:
SalesManager(string n, int i, double s, double ss) : Employee(n, i), salary(s), sales(ss) {}
double getSalary() {
return salary + sales * 0.005;
}
void printInfo() {
Employee::printInfo();
cout << "Salary: " << getSalary() << endl;
cout << "Sales: " << sales << endl;
}
};
class HourlyWorker : public Employee {
private:
double wage;
double hours;
public:
HourlyWorker(string n, int i, double w, double h) : Employee(n, i), wage(w), hours(h) {}
double getSalary() {
return wage * hours;
}
void printInfo() {
Employee::printInfo();
cout << "Salary: " << getSalary() << endl;
cout << "Wage: " << wage << endl;
cout << "Hours: " << hours << endl;
}
};
int main() {
Employee* emp1 = new SalesManager("John", 1001, 5000, 100000);
Employee* emp2 = new HourlyWorker("Mike", 1002, 50, 160);
emp1->printInfo();
cout << endl;
emp2->printInfo();
cout << endl;
delete emp1;
delete emp2;
return 0;
}
```
在这个示例中,首先定义了一个基类Employee,其中包含了数据成员name和ID,以及纯虚函数getSalary()和虚函数printInfo()。然后派生出SalesManager类和HourlyWorker类,它们都重写了基类的getSalary()和printInfo()函数。在SalesManager类中,额外定义了数据成员salary和sales,代表销售经理的固定月薪和销售额,重写了getSalary()函数来计算销售经理的月工资;在HourlyWorker类中,额外定义了数据成员wage和hours,代表钟点工的每小时工资数和月工作小时数,重写了getSalary()函数来计算钟点工的月工资。最后在主函数中,用Employee对象指针分别指向SalesManager和HourlyWorker对象,并通过调用printInfo()函数输出职员的信息和工资。