C++ 多态实现薪资计算:老板、雇员、小时工和营销人员
C++ 多态实现薪资计算:老板、雇员、小时工和营销人员
本程序使用 C++ 多态性来实现一个薪资计算系统,涵盖了老板、雇员、小时工和营销人员四种类型的员工。每个类型都有不同的薪资计算方式,并使用虚函数来实现多态计算。
代码如下:
#include<iostream>
#include<string>
using namespace std;
class Peso {
protected:
string name; // 姓名
string id; // 职工编号
int age; // 年龄
char sex; // 性别
public:
Peso(string n, string i, int a, char s) :name(n), id(i), age(a), sex(s) {}
virtual double getPay() = 0; // 纯虚函数
virtual void print() { // 虚函数
cout << '姓名:' << name << endl;
cout << '职工编号:' << id << endl;
cout << '年龄:' << age << endl;
cout << '性别:' << sex << endl;
}
};
// 老板类
class Boss :public Peso {
private:
double salary; // 年薪
public:
Boss(string n, string i, int a, char s, double sal) :Peso(n, i, a, s), salary(sal) {}
double getPay() { return salary; } // 实现纯虚函数
void print() { // 重载虚函数
Peso::print(); // 调用父类的print函数
cout << '年薪:' << salary << endl;
}
};
// 雇员类
class Employee :public Peso {
private:
double basicPay; // 基本工资
double bonus; // 奖金
public:
Employee(string n, string i, int a, char s, double bp, double b) :Peso(n, i, a, s), basicPay(bp), bonus(b) {}
double getPay() { return basicPay + bonus; } // 实现纯虚函数
void print() { // 重载虚函数
Peso::print(); // 调用父类的print函数
cout << '基本工资:' << basicPay << endl;
cout << '奖金:' << bonus << endl;
}
};
// 小时工类
class HourlyWorker :public Peso {
private:
double hourPay; // 每小时单价
double workHour; // 工作时间
public:
HourlyWorker(string n, string i, int a, char s, double hp, double wh) :Peso(n, i, a, s), hourPay(hp), workHour(wh) {}
double getPay() { return hourPay * workHour; } // 实现纯虚函数
void print() { // 重载虚函数
Peso::print(); // 调用父类的print函数
cout << '每小时单价:' << hourPay << endl;
cout << '工作时间:' << workHour << endl;
}
};
// 营销人员类
class CommWorker :public Peso {
private:
double basicPay; // 基本工资
double saleProfit; // 销售利润
public:
CommWorker(string n, string i, int a, char s, double bp, double sp) :Peso(n, i, a, s), basicPay(bp), saleProfit(sp) {}
double getPay() { return basicPay + saleProfit * 0.05; } // 实现纯虚函数
void print() { // 重载虚函数
Peso::print(); // 调用父类的print函数
cout << '基本工资:' << basicPay << endl;
cout << '销售利润:' << saleProfit << endl;
}
};
int main() {
Peso* p[4]; // 定义基类指针数组
p[0] = new Boss('张三', '001', 40, 'M', 150000); // 实例化各个类的对象
p[1] = new Employee('李四', '002', 25, 'F', 5000, 1000);
p[2] = new HourlyWorker('王五', '003', 30, 'M', 100, 160);
p[3] = new CommWorker('赵六', '004', 28, 'F', 8000, 10000);
for (int i = 0; i < 4; i++) { // 循环输出各个对象的数据
p[i]->print();
cout << '工资:' << p[i]->getPay() << endl;
cout << '--------------------------' << endl;
}
return 0;
}
代码解释
-
类
Peso: 作为所有员工类型的基类,包含姓名、职工编号、年龄、性别等共同属性。getPay()为纯虚函数,用于计算薪资,各子类需要实现该函数。print()为虚函数,用于打印员工基本信息。
-
子类: 包括
Boss、Employee、HourlyWorker和CommWorker四种类型,分别实现不同的薪资计算方式。- 每个子类都重载
getPay()函数,实现各自的薪资计算。 - 每个子类都重载
print()函数,输出各自的额外信息。
- 每个子类都重载
-
主函数
main():- 创建一个
Peso指针数组,用于存储不同类型员工的指针。 - 使用
new关键字实例化各个类的对象,并将其指针存入数组。 - 循环遍历数组,调用每个对象的
print()和getPay()函数,输出每个员工的信息和薪资。
- 创建一个
总结
本程序通过多态性,实现了不同类型的员工薪资计算和信息输出。这体现了多态性在面向对象编程中的优势,提高了代码的灵活性和可扩展性。
原文地址: https://www.cveoy.top/t/topic/nZDb 著作权归作者所有。请勿转载和采集!