先建立一个职工类Employee,包含数据成员name(姓名),ID(编号),以他为基类,派生出经理类Manager和技术人员类Technician,在经理类中增加数据成员salary(月工资),在技术人员类中增加数据成员wage(代表每小时的工资)和hours(工作时长)。在定义类时,所有类中必须包含构造函数、析构函数、修改和获取所有数据成员的函数,以及虚函数计算职工的工资、输出职工的信息。
时间: 2024-03-02 18:50:20 浏览: 23
好的,以下是代码实现:
```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() {}
virtual double calculateSalary() = 0; // 纯虚函数
virtual void printInfo() {
cout << "Name: " << name << endl;
cout << "ID: " << ID << endl;
}
};
class Manager: public Employee {
private:
double salary;
public:
Manager(string name, int ID, double salary): Employee(name, ID), salary(salary) {}
~Manager() {}
double calculateSalary() { // 实现虚函数
return salary;
}
void printInfo() { // 重写虚函数
Employee::printInfo();
cout << "Salary: " << 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) {}
~Technician() {}
double calculateSalary() { // 实现虚函数
return wage * hours;
}
void printInfo() { // 重写虚函数
Employee::printInfo();
cout << "Wage: " << wage << endl;
cout << "Hours: " << hours << endl;
}
};
int main() {
Employee *emp1 = new Manager("Tom", 1001, 10000);
Employee *emp2 = new Technician("Jerry", 2001, 50, 200);
emp1->printInfo();
cout << "Salary: " << emp1->calculateSalary() << endl;
emp2->printInfo();
cout << "Salary: " << emp2->calculateSalary() << endl;
delete emp1;
delete emp2;
return 0;
}
```
在这个程序中,我们定义了一个基类 `Employee`,它包含了两个数据成员 `name` 和 `ID`。然后我们派生出了两个子类 `Manager` 和 `Technician`。在 `Manager` 类中,我们增加了一个数据成员 `salary`,在 `Technician` 类中,我们增加了两个数据成员 `wage` 和 `hours`。同时,我们还实现了 `Employee` 类的纯虚函数 `calculateSalary()`,该函数在子类中进行实现,用于计算职工的工资。我们还重写了虚函数 `printInfo()`,用于输出职工的信息。
在 `main` 函数中,我们创建了两个指向基类的指针 `emp1` 和 `emp2`,分别指向 `Manager` 类对象和 `Technician` 类对象。我们通过这两个指针调用虚函数 `printInfo()` 和 `calculateSalary()` 来输出职工的信息和计算职工的工资。最后,记得释放动态分配的内存。
阅读全文