先建立一个职工类Employee, 包含数据成员name(姓名), ID(编号),以他为基类, 派生出经理类Manager和技术人员类Technician, 在经理类中增加数据成员salary(月工资), 在技术人员类中增加数据成员wage(代表每小时的工资)和hours(工作时长)。 在定义类时,所有类中必须包含构造函数、 析构函数、修改和获取所有数据成员的函数, 以及虚函数计算职工的工资、输出职工的信息。
时间: 2024-02-28 21:57:00 浏览: 137
新建一个雇员类,它的数据成员有雇员代号,年龄,工资,性别, 姓名,输入雇员资料方法,打印雇员资料方法。
好的,我知道了你的要求。以下是代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
class Employee {
protected:
string name; // 姓名
int ID; // 编号
public:
Employee(string _name, int _ID) : name(_name), ID(_ID) {}
virtual ~Employee() {}
void setName(string _name) { name = _name; }
void setID(int _ID) { ID = _ID; }
string getName() const { return name; }
int getID() const { return ID; }
virtual double getSalary() const = 0; // 纯虚函数,用于计算工资
virtual void printInfo() const = 0; // 纯虚函数,用于输出员工信息
};
class Manager : public Employee {
private:
double salary; // 月工资
public:
Manager(string _name, int _ID, double _salary) : Employee(_name, _ID), salary(_salary) {}
double getSalary() const { return salary; }
void setSalary(double _salary) { salary = _salary; }
void printInfo() const { cout << "姓名:" << name << ",编号:" << ID << ",月工资:" << salary << endl; }
};
class Technician : public Employee {
private:
double wage; // 每小时工资
int hours; // 工作时长
public:
Technician(string _name, int _ID, double _wage, int _hours) : Employee(_name, _ID), wage(_wage), hours(_hours) {}
double getSalary() const { return wage * hours; }
void setWage(double _wage) { wage = _wage; }
void setHours(int _hours) { hours = _hours; }
void printInfo() const { cout << "姓名:" << name << ",编号:" << ID << ",每小时工资:" << wage << ",工作时长:" << hours << "小时" << endl; }
};
int main() {
Manager m("张三", 10001, 10000.0);
Technician t("李四", 10002, 100.0, 160);
Employee *e1, *e2;
e1 = &m;
e2 = &t;
e1->printInfo();
e2->printInfo();
return 0;
}
```
以上代码中,`Employee` 是职工类,其中声明了 `name` 和 `ID` 两个数据成员,以及纯虚函数 `getSalary` 和 `printInfo`。`Manager` 经理类和 `Technician` 技术人员类都继承自 `Employee` 类,并且分别增加了自己的数据成员和构造函数。`getSalary` 和 `printInfo` 函数在这两个派生类中都被重写了,以满足各自的需求。
在 `main` 函数中,我们创建了 `Manager` 和 `Technician` 两个对象,并且通过指向基类的指针 `e1` 和 `e2` 分别指向这两个对象。通过 `e1->printInfo()` 和 `e2->printInfo()` 可以分别调用 `Manager` 和 `Technician` 类中的 `printInfo` 函数,实现多态。
阅读全文