1. 项目概述:当C++多态遇上职工管理系统
去年重构公司人事系统时,我尝试用C++多态特性实现了一套轻量级职工管理系统。这个项目完美展示了面向对象三大特性之一的"多态"如何在实际业务中发挥作用。不同于简单继承,多态允许我们通过基类指针调用不同子类的方法,这在处理多种职工类型时特别有用——比如计算薪资时,普通员工和经理的核算方式完全不同。
系统核心功能包括:
- 职工信息增删改查(CRUD)
- 按类型统计人数
- 薪资自动计算(区分不同岗位)
- 数据文件持久化存储
完整代码已托管在Github(链接见文末),但更重要的是理解多态在这种场景下的设计思路。下面我会拆解关键实现细节,包括那个让我调试了3小时的虚函数表问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心设计:多态架构解析
2.1 类层次结构设计
基类Employee定义了所有职工的公共接口:
cpp复制class Employee {
public:
virtual ~Employee() = default;
virtual void calculateSalary() = 0; // 纯虚函数
virtual void showInfo() const = 0;
protected:
int m_id;
string m_name;
int m_deptId; // 部门编号
};
三个派生类的关键差异点:
Worker:普通员工,时薪制Manager:固定月薪+奖金Boss:固定年薪+分红
关键技巧:析构函数必须声明为virtual,否则通过基类指针删除子类对象时会导致内存泄漏。这是新手常踩的坑。
2.2 多态的应用场景
在薪资计算模块中,多态的优势尤为明显:
cpp复制// 在main.cpp中
vector<Employee*> employees;
void calculateAll() {
for (auto emp : employees) {
emp->calculateSalary(); // 自动调用对应子类实现
}
}
这种设计的扩展性极强——当需要新增职工类型(如外包人员)时,只需继承Employee并
