编写程序:(虚函数与多态) (1)有一个工厂有三类人:固定工资工人、计件工人、计时工人。 (2)他们有共同的特征:都有名字、住址。 (3)三类员工的工资计算方法不同:固定工资工人,每个月领的工资是不变的;计件工人根据生产的产品数量计算工资;计时工人根据工作的时间长短计算工资。 (4)在main函数中创建不同的员工,并依次输出每个员工的名字、住址和工资信息。 (5)设计程序,要求体现多态性。
时间: 2024-03-22 15:40:27 浏览: 101
虚函数是C++中用于实现多态(polymorphism)的机制
下面是一个使用虚函数和多态的示例程序:
```c++
#include <iostream>
#include <string>
using namespace std;
// 员工基类
class Employee {
protected:
string name; // 姓名
string address; // 住址
public:
Employee(string n, string a): name(n), address(a) {}
virtual double pay() = 0; // 纯虚函数,用于计算工资
virtual void print() { // 打印员工信息
cout << "姓名:" << name << ",住址:" << address;
}
};
// 固定工资工人
class SalariedEmployee : public Employee {
private:
double salary; // 固定工资
public:
SalariedEmployee(string n, string a, double s): Employee(n, a), salary(s) {}
virtual double pay() { // 计算工资
return salary;
}
virtual void print() { // 打印员工信息
Employee::print();
cout << ",工资:" << pay() << endl;
}
};
// 计件工人
class PieceWorker : public Employee {
private:
int pieces; // 完成的产品数量
double wage; // 每个产品的工资
public:
PieceWorker(string n, string a, int p, double w): Employee(n, a), pieces(p), wage(w) {}
virtual double pay() { // 计算工资
return pieces * wage;
}
virtual void print() { // 打印员工信息
Employee::print();
cout << ",工资:" << pay() << endl;
}
};
// 计时工人
class HourlyEmployee : public Employee {
private:
double wage; // 每小时工资
double hours; // 工作时长
public:
HourlyEmployee(string n, string a, double w, double h): Employee(n, a), wage(w), hours(h) {}
virtual double pay() { // 计算工资
if (hours <= 40) {
return wage * hours;
} else {
return wage * 40 + (hours - 40) * wage * 1.5;
}
}
virtual void print() { // 打印员工信息
Employee::print();
cout << ",工资:" << pay() << endl;
}
};
int main() {
Employee *e1 = new SalariedEmployee("张三", "北京", 5000);
Employee *e2 = new PieceWorker("李四", "上海", 100, 20);
Employee *e3 = new HourlyEmployee("王五", "广州", 50, 45);
e1->print();
e2->print();
e3->print();
delete e1;
delete e2;
delete e3;
return 0;
}
```
在这个程序中,我们定义了一个员工基类 `Employee`,包含员工的姓名和住址,并定义了一个纯虚函数 `pay()`,用于计算员工的工资。然后我们派生出了三个类:固定工资工人 `SalariedEmployee`、计件工人 `PieceWorker` 和计时工人 `HourlyEmployee`,分别实现了自己的工资计算方法,并重写了基类的 `print()` 函数,用于打印员工的信息。
在 `main()` 函数中,我们创建了三个不同的员工,并用基类的指针指向它们,然后依次调用它们的 `print()` 函数,实现了多态性。最后别忘了释放内存。
阅读全文