用c++代码实现以下问题(要求代码简明):先建立一个职工类Employee,包含数据成员name(姓名),ID(编号),以他为基类,派生出经理类Manager和技术人员类Technician,在经理类中增加数据成员salary(月工资),在技术人员类中增加数据成员wage(代表每小时的工资)和hours(工作时长)。在定义类时,所有类中必须包含构造函数、析构函数、修改和获取所有数据成员的函数,以及虚函数计算职工的工资、输出职工的信息。
时间: 2024-03-20 22:43:31 浏览: 74
以下是实现以上问题的C++代码:
```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 Manager : public Employee {
private:
double salary;
public:
Manager(string n, int id, double s): Employee(n, id), salary(s) {}
~Manager() {}
double getSalary() {
return salary;
}
void getInfo() {
Employee::getInfo();
cout << "Salary: " << salary << endl;
}
};
class Technician : public Employee {
private:
double wage;
int hours;
public:
Technician(string n, int id, double w, int h): Employee(n, id), wage(w), hours(h) {}
~Technician() {}
double getSalary() {
return wage * hours;
}
void getInfo() {
Employee::getInfo();
cout << "Wage: " << wage << endl;
cout << "Hours: " << hours << endl;
}
};
int main() {
Employee* e1 = new Manager("Tom", 1, 5000);
Employee* e2 = new Technician("John", 2, 20, 160);
e1->getInfo();
cout << "Salary: " << e1->getSalary() << endl;
e2->getInfo();
cout << "Salary: " << e2->getSalary() << endl;
delete e1;
delete e2;
return 0;
}
```
代码中定义了一个职工类Employee,包含姓名和编号两个数据成员,以及虚函数getSalary和getInfo。然后使用该类派生出经理类和技术人员类,分别增加了月工资(salary)和每小时工资(wage)和工作时长(hours)这两个数据成员,并重写了getSalary和getInfo函数。最后在主函数中创建了一个经理类对象和一个技术人员类对象,分别调用了getInfo和getSalary函数,并释放了动态分配的内存。
阅读全文