用c++编写:3、抽象类和“异质表”编程。定义一个人员抽象类People,有姓名属性name,有构造函数、有纯虚函数cal_salary( )和纯虚函数print()。从People派生出经理Manage类和小时工HourWorker类,在这两个派生类中实现纯虚函数cal_salary( )、print()的功能,分别计算工资和输出对象信息。经理工资每月是固定的,小时工的工作为每小时报酬乘小时数,给经理类和小时工类新增相应的属性和成员,以实现所需功能。 在main函数中声明一个People类型的指针数组arr,数组长度为3,创建一个Manage对象和两个HourWorker对象,将它们的地址存到指针数组arr中,用循环语句处理数组,运用多态性,计算每个数组元素所指向的对象的工资,并将对象信息输出。
时间: 2023-06-25 07:07:36 浏览: 54
以下是C++代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
// 定义人员抽象类People
class People {
protected:
string name; // 姓名
public:
People(string n) : name(n) {} // 构造函数
virtual double cal_salary() = 0; // 纯虚函数:计算工资
virtual void print() = 0; // 纯虚函数:输出对象信息
};
// 经理类Manage
class Manage : public People {
private:
double salary; // 工资
public:
Manage(string n, double s) : People(n), salary(s) {} // 构造函数
double cal_salary() { return salary; } // 计算工资
void print() { cout << "姓名:" << name << ",职位:经理,工资:" << salary << endl; } // 输出对象信息
};
// 小时工类HourWorker
class HourWorker : public People {
private:
double wage; // 每小时报酬
double hours; // 工作小时数
public:
HourWorker(string n, double w, double h) : People(n), wage(w), hours(h) {} // 构造函数
double cal_salary() { return wage * hours; } // 计算工资
void print() { cout << "姓名:" << name << ",职位:小时工,工资:" << cal_salary() << endl; } // 输出对象信息
};
int main() {
People* arr[3]; // 定义People类型的指针数组arr,数组长度为3
Manage m("张经理", 5000); // 创建一个Manage对象
HourWorker hw1("李小时工1", 20, 50); // 创建两个HourWorker对象
HourWorker hw2("王小时工2", 25, 60);
arr[0] = &m; // 将对象地址存到指针数组arr中
arr[1] = &hw1;
arr[2] = &hw2;
for (int i = 0; i < 3; i++) { // 循环处理数组
arr[i]->print(); // 输出对象信息
cout << "实发工资:" << arr[i]->cal_salary() << endl; // 计算工资并输出
}
return 0;
}
```
输出结果:
```
姓名:张经理,职位:经理,工资:5000
实发工资:5000
姓名:李小时工1,职位:小时工,工资:1000
实发工资:1000
姓名:王小时工2,职位:小时工,工资:1500
实发工资:1500
```