1、先建立一个职工类Employee,包含数据成员name(姓名),ID(编号),以他为基类,派生出经理类Manager和技术人员类Technician,在经理类中增加数据成员salary(月工资),在技术人员类中增加数据成员wage(代表每小时的工资)和hours(工作时长)。在定义类时,所有类中必须包含构造函数、析构函数、修改和获取所有数据成员的函数,以及虚函数计算职工的工资、输出职工的信息。
时间: 2024-02-21 11:58:01 浏览: 15
好的,我理解你的问题是让我帮你设计一个职工类Employee,以及它的两个派生类Manager和Technician。同时,每个类都需要包含构造函数、析构函数、修改和获取所有数据成员的函数,以及虚函数计算职工的工资、输出职工的信息。下面是一个可能的实现:
```c++
#include <iostream>
#include <string>
using namespace std;
class Employee{
public:
Employee(string n, int id): name(n), ID(id) {}
virtual ~Employee() {}
void setName(string n) { name = n; }
string getName() const { return name; }
void setID(int id) { ID = id; }
int getID() const { return ID; }
virtual double getSalary() const = 0;
virtual void print() const {
cout << "Name: " << name << endl;
cout << "ID: " << ID << endl;
}
private:
string name;
int ID;
};
class Manager: public Employee{
public:
Manager(string n, int id, double s): Employee(n, id), salary(s) {}
virtual ~Manager() {}
void setSalary(double s) { salary = s; }
double getSalary() const { return salary; }
virtual void print() const {
Employee::print();
cout << "Salary: " << salary << endl;
}
private:
double salary;
};
class Technician: public Employee{
public:
Technician(string n, int id, double w, double h): Employee(n, id), wage(w), hours(h) {}
virtual ~Technician() {}
void setWage(double w) { wage = w; }
double getWage() const { return wage; }
void setHours(double h) { hours = h; }
double getHours() const { return hours; }
virtual double getSalary() const {
return wage * hours;
}
virtual void print() const {
Employee::print();
cout << "Wage: " << wage << endl;
cout << "Hours: " << hours << endl;
}
private:
double wage;
double hours;
};
int main(){
Employee* e1 = new Manager("Alice", 1, 5000);
Employee* e2 = new Technician("Bob", 2, 50, 120);
e1->print();
cout << "Salary: " << e1->getSalary() << endl;
e2->print();
cout << "Salary: " << e2->getSalary() << endl;
delete e1;
delete e2;
return 0;
}
```
在这个实现中,Employee是职工类,包含数据成员name和ID,以及构造函数、析构函数、修改和获取所有数据成员的函数。它还有一个纯虚函数getSalary()和一个虚函数print(),前者用于计算职工的工资,后者用于输出职工的信息。Manager是经理类,继承自Employee,并增加了数据成员salary。它有自己的构造函数、析构函数、修改和获取数据成员的函数,以及重载了父类的getSalary()和print()函数。Technician是技术人员类,继承自Employee,并增加了数据成员wage和hours。它有自己的构造函数、析构函数、修改和获取数据成员的函数,以及重载了父类的getSalary()和print()函数。在main函数中,我们创建了一个Manager对象和一个Technician对象,并对它们进行了测试。最后,别忘了在程序结束时释放动态分配的内存。