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;
}

代码解释

  1. Peso 作为所有员工类型的基类,包含姓名、职工编号、年龄、性别等共同属性。

    • getPay() 为纯虚函数,用于计算薪资,各子类需要实现该函数。
    • print() 为虚函数,用于打印员工基本信息。
  2. 子类: 包括 BossEmployeeHourlyWorkerCommWorker 四种类型,分别实现不同的薪资计算方式。

    • 每个子类都重载 getPay() 函数,实现各自的薪资计算。
    • 每个子类都重载 print() 函数,输出各自的额外信息。
  3. 主函数 main()

    • 创建一个 Peso 指针数组,用于存储不同类型员工的指针。
    • 使用 new 关键字实例化各个类的对象,并将其指针存入数组。
    • 循环遍历数组,调用每个对象的 print()getPay() 函数,输出每个员工的信息和薪资。

总结

本程序通过多态性,实现了不同类型的员工薪资计算和信息输出。这体现了多态性在面向对象编程中的优势,提高了代码的灵活性和可扩展性。

C++ 多态实现薪资计算:老板、雇员、小时工和营销人员

原文地址: https://www.cveoy.top/t/topic/nZDb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录