用c++实现编程实现基类Employee,派生类Manager和HourlyWorker。Employee有数据成员name和ID;Manager有数据成员sal,代表经理的月工资; HourlyWorker有wage,hours和sal,分别代表钟点工的每小时工资数、月工作时数和月工资总数,并创建成员函数salllay()求出钟点工的月工资总数=每小时工资数*月工作时数。定义的所有类中都必须包含构造函数,最终输出所有数据的值。
时间: 2024-03-21 08:40:46 浏览: 57
C++基类指针和派生类指针之间的转换方法讲解
您好!根据您的要求,我为您编写了以下的代码,实现了基类 `Employee` 和派生类 `Manager` 和 `HourlyWorker`,并实现了相关的数据成员和成员函数:
```c++
#include <iostream>
#include <string>
class Employee {
public:
Employee(const std::string& name, const std::string& id) : name_(name), id_(id) {}
virtual ~Employee() {}
virtual double salary() const = 0;
std::string name() const { return name_; }
std::string id() const { return id_; }
private:
std::string name_;
std::string id_;
};
class Manager : public Employee {
public:
Manager(const std::string& name, const std::string& id, const double sal) : Employee(name, id), sal_(sal) {}
double salary() const override { return sal_; }
private:
double sal_;
};
class HourlyWorker : public Employee {
public:
HourlyWorker(const std::string& name, const std::string& id, const double wage, const double hours)
: Employee(name, id), wage_(wage), hours_(hours) {}
double salary() const override { return wage_ * hours_; }
private:
double wage_;
double hours_;
};
int main() {
Employee* emp1 = new Manager("Tom", "001", 5000.0);
Employee* emp2 = new HourlyWorker("Jack", "002", 30.0, 160.0);
std::cout << "Name: " << emp1->name() << ", ID: " << emp1->id() << ", Salary: " << emp1->salary() << std::endl;
std::cout << "Name: " << emp2->name() << ", ID: " << emp2->id() << ", Salary: " << emp2->salary() << std::endl;
delete emp1;
delete emp2;
return 0;
}
```
这个代码中,我们使用了面向对象的思想,定义了基类 `Employee` 和派生类 `Manager` 和 `HourlyWorker`,并使用了虚函数 `salary()` 来计算每个员工的月工资总数。其中,基类 `Employee` 中包含了数据成员 `name_` 和 `id_`,派生类 `Manager` 中包含了数据成员 `sal_`,派生类 `HourlyWorker` 中包含了数据成员 `wage_` 和 `hours_`。在 `main()` 函数中,我们使用了基类指针,分别指向派生类对象,并调用了相应的成员函数来输出每个员工的姓名、ID和月工资总数。
阅读全文