编程实现基类Employee,派生类salesManager和HourlyWorker。Employee有数据成员name和ID,表示员工的姓名和编号;salesManager有数据成员salary和sales,代表销售经理的固定月薪和销售额,另外,销售经理固定月薪为5000元并提取销售额的0.5%作为工资;HourlyWorker有数据成员wage和hours,分别代表钟点工的每小时工资数和月工作小时数。要求:定义的所有类中必须包含构造函数,计算职员的月工资的函数定义为纯虚函数来,输出职员的信息函数定义为虚函数。用Emplayee对象指针调用成员函数输出销售经理和钟点工的信息和工资。
时间: 2024-03-09 07:44:20 浏览: 53
好的,这是一个比较典型的面向对象编程题目,我们可以先定义基类Employee,然后分别定义派生类salesManager和HourlyWorker,具体实现如下:
```c++
#include<iostream>
#include<string>
using namespace std;
//定义基类Employee
class Employee{
protected:
string name; //员工姓名
int ID; //员工编号
public:
Employee(string n, int id):name(n),ID(id){} //构造函数
virtual double getSalary() = 0; //计算职员月工资的纯虚函数
virtual void printInfo(){ //输出职员信息的虚函数
cout<<"Name: "<<name<<endl;
cout<<"ID: "<<ID<<endl;
}
};
//定义派生类salesManager
class salesManager:public Employee{
private:
double salary; //固定月薪
double sales; //销售额
public:
salesManager(string n, int id, double s, double sa):Employee(n, id),salary(sa),sales(s){}
double getSalary(){ //计算职员月工资的纯虚函数
return salary + sales*0.005; //固定月薪加销售额的0.5%
}
void printInfo(){ //输出职员信息的虚函数
cout<<"Sales Manager Information:"<<endl;
Employee::printInfo(); //调用基类Employee的printInfo函数
cout<<"Salary: "<<salary<<endl;
cout<<"Sales: "<<sales<<endl;
}
};
//定义派生类HourlyWorker
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 printInfo(){ //输出职员信息的虚函数
cout<<"Hourly Worker Information:"<<endl;
Employee::printInfo(); //调用基类Employee的printInfo函数
cout<<"Wage: "<<wage<<endl;
cout<<"Hours: "<<hours<<endl;
}
};
int main(){
Employee *e1 = new salesManager("Tom", 1001, 50000, 100000);
Employee *e2 = new HourlyWorker("Jerry", 1002, 30, 160);
e1->printInfo();
cout<<"Salary: "<<e1->getSalary()<<endl;
cout<<endl;
e2->printInfo();
cout<<"Salary: "<<e2->getSalary()<<endl;
return 0;
}
```
在上面的代码中,我们定义了基类Employee,其中包含了数据成员name和ID,代表员工的姓名和编号,还有构造函数和两个虚函数:getSalary和printInfo。其中,getSalary是一个纯虚函数,因为我们不知道每种员工的月工资如何计算,需要在派生类中进行实现。printInfo是一个虚函数,可以在基类中实现,也可以在派生类中重载。
接下来,我们定义了两个派生类salesManager和HourlyWorker,分别代表销售经理和钟点工。在salesManager中,我们定义了两个数据成员salary和sales,分别代表销售经理的固定月薪和销售额。在getSalary函数中,我们根据题目要求,将固定月薪和销售额的0.5%相加,作为该销售经理的月工资。在printInfo函数中,我们输出了销售经理的信息,包括姓名、编号、固定月薪和销售额。
在HourlyWorker中,我们定义了两个数据成员wage和hours,分别代表钟点工的每小时工资数和月工作小时数。在getSalary函数中,我们将每小时工资数乘以月工作小时数,作为该钟点工的月工资。在printInfo函数中,我们输出了钟点工的信息,包括姓名、编号、每小时工资数和月工作小时数。
最后,在main函数中,我们定义了两个Employee对象指针e1和e2,分别指向一个销售经理和一个钟点工。然后,调用它们的printInfo函数和getSalary函数,输出员工的信息和月工资。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)