假设你是大一学生,请用c++代码实现以下问题:先建立一个职工类Employee,包含数据成员name(姓名),ID(编号),以他为基类,派生出经理类Manager和技术人员类Technician,在经理类中增加数据成员salary(月工资),在技术人员类中增加数据成员wage(代表每小时的工资)和hours(工作时长)。在定义类时,所有类中必须包含构造函数、析构函数、修改和获取所有数据成员的函数,以及虚函数计算职工的工资、输出职工的信息。
时间: 2024-03-23 22:38:23 浏览: 93
好的,下面是代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
class Employee {
public:
Employee(string name, int id);
virtual ~Employee();
void setName(string name);
void setID(int id);
string getName();
int getID();
virtual float getSalary() = 0; // 纯虚函数
virtual void printInfo() = 0; // 纯虚函数
private:
string m_name;
int m_id;
};
class Manager : public Employee {
public:
Manager(string name, int id, float salary);
~Manager();
void setSalary(float salary);
float getSalary();
void printInfo();
private:
float m_salary;
};
class Technician : public Employee {
public:
Technician(string name, int id, float wage, float hours);
~Technician();
void setWage(float wage);
void setHours(float hours);
float getSalary();
void printInfo();
private:
float m_wage;
float m_hours;
};
Employee::Employee(string name, int id) : m_name(name), m_id(id) {}
Employee::~Employee() {}
void Employee::setName(string name) {
m_name = name;
}
void Employee::setID(int id) {
m_id = id;
}
string Employee::getName() {
return m_name;
}
int Employee::getID() {
return m_id;
}
Manager::Manager(string name, int id, float salary) : Employee(name, id), m_salary(salary) {}
Manager::~Manager() {}
void Manager::setSalary(float salary) {
m_salary = salary;
}
float Manager::getSalary() {
return m_salary;
}
void Manager::printInfo() {
cout << "Name: " << getName() << endl;
cout << "ID: " << getID() << endl;
cout << "Salary: " << getSalary() << endl;
}
Technician::Technician(string name, int id, float wage, float hours) : Employee(name, id), m_wage(wage), m_hours(hours) {}
Technician::~Technician() {}
void Technician::setWage(float wage) {
m_wage = wage;
}
void Technician::setHours(float hours) {
m_hours = hours;
}
float Technician::getSalary() {
return m_wage * m_hours;
}
void Technician::printInfo() {
cout << "Name: " << getName() << endl;
cout << "ID: " << getID() << endl;
cout << "Salary: " << getSalary() << endl;
}
int main() {
Manager m("Tom", 1, 8000.0);
Technician t("Jerry", 2, 100.0, 80.0);
Employee *e = &m;
e->printInfo();
cout << "---------------------" << endl;
e = &t;
e->printInfo();
return 0;
}
```
在上面的代码中,我们首先定义了一个基类 `Employee`,它包含了所有职工共有的数据成员和函数。其中,`getSalary` 和 `printInfo` 是纯虚函数,因为不同的职工计算工资和输出信息的方式不同,需要在派生类中实现。
然后,我们分别定义了两个派生类 `Manager` 和 `Technician`,它们分别增加了自己的数据成员和实现了基类中的纯虚函数。
最后,在 `main` 函数中,我们分别创建了一个 `Manager` 和一个 `Technician` 对象,并且通过基类指针 `Employee *e` 来调用它们的 `printInfo` 函数。由于 `printInfo` 是虚函数,因此会根据实际对象的类型调用对应的函数。
阅读全文