2、先建立一个职工类 Employee,包含数据成员name(姓名),1D(编号),以他为 基类,派生出经理类 Manager 和技术人员类 Technician,在经理类中增加数据成员 salary 月工资),在技术人员类中增加数据成员 wage(代表每小时的工资)和 hours(工作时长)。 在定义类时,所有类中必须包含构造西数、析构西数、修改和获取所有数据成员的函数 以及虚西数计算职工的工资、输出职工的信息。用c语言解决
时间: 2024-03-02 07:51:50 浏览: 98
以下是用 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 声明职工类
struct Employee {
char name[20]; // 姓名
int id; // 编号
// 构造函数
Employee(char *n, int i) {
strcpy(name, n);
id = i;
}
// 虚函数,计算职工的工资
virtual float calculate_salary() {
return 0;
}
// 输出职工信息
virtual void display_info() {
printf("Name: %s\n", name);
printf("ID: %d\n", id);
}
// 析构函数
virtual ~Employee() {}
};
// 声明经理类
struct Manager : public Employee {
float salary; // 月工资
// 构造函数
Manager(char *n, int i, float s) : Employee(n, i) {
salary = s;
}
// 实现计算职工的工资
float calculate_salary() {
return salary;
}
// 输出职工信息
void display_info() {
printf("Manager\n");
Employee::display_info();
printf("Salary: %.2f\n", salary);
}
};
// 声明技术人员类
struct Technician : public Employee {
float wage; // 每小时的工资
int hours; // 工作时长
// 构造函数
Technician(char *n, int i, float w, int h) : Employee(n, i) {
wage = w;
hours = h;
}
// 实现计算职工的工资
float calculate_salary() {
return wage * hours;
}
// 输出职工信息
void display_info() {
printf("Technician\n");
Employee::display_info();
printf("Wage: %.2f\n", wage);
printf("Hours: %d\n", hours);
}
};
int main() {
Employee *e1 = new Manager("Tom", 1001, 5000.0f);
Employee *e2 = new Technician("Jerry", 1002, 50.0f, 100);
e1->display_info();
printf("Salary: %.2f\n", e1->calculate_salary());
e2->display_info();
printf("Salary: %.2f\n", e2->calculate_salary());
delete e1;
delete e2;
return 0;
}
```
注意,C 语言并没有类的概念,但是我们可以用结构体来模拟类。在上面的代码中,我们定义了三个结构体:Employee、Manager 和 Technician。其中,Manager 和 Technician 都从 Employee 派生而来,表示经理和技术人员类。在 Employee 中,我们定义了虚函数 calculate_salary 和 display_info,分别用于计算职工的工资和输出职工信息。在 Manager 和 Technician 中,我们重新定义了这两个虚函数,以实现各自的功能。在 main 函数中,我们创建了一个 Manager 对象和一个 Technician 对象,并调用它们的 display_info 和 calculate_salary 函数,输出它们的信息和工资。最后,我们释放了对象的内存空间。
阅读全文