设计思路
- 封装:将员工信息封装在
Employee
类中,通过访问修饰符(如private
)保护成员变量,提供公共的访问方法(如getter
和setter
)来操作这些变量,确保数据安全。
- 继承:可以考虑创建一个基类
Employee
,然后根据不同职位类型(如经理、普通员工等)创建子类继承自Employee
。子类可以根据自身需求重写或扩展基类的方法。
- 多态:利用虚函数和指针或引用的多态性,在处理树形结构时,可以以统一的方式处理不同类型的员工对象,方便进行薪资统计和调整操作。
关键实现步骤
- 定义
Employee
类
class Employee {
private:
std::string name;
std::string position;
double salary;
public:
Employee(const std::string& n, const std::string& p, double s)
: name(n), position(p), salary(s) {}
std::string getName() const { return name; }
std::string getPosition() const { return position; }
double getSalary() const { return salary; }
void setSalary(double s) { salary = s; }
};
- 定义树形结构节点
class TreeNode {
public:
Employee* employee;
std::vector<TreeNode*> children;
TreeNode(Employee* emp) : employee(emp) {}
~TreeNode() {
for (TreeNode* child : children) {
delete child;
}
delete employee;
}
};
- 薪资统计
double calculateTotalSalary(TreeNode* root) {
if (!root) return 0;
double total = root->employee->getSalary();
for (TreeNode* child : root->employee->children) {
total += calculateTotalSalary(child);
}
return total;
}
- 薪资调整
void adjustSalary(TreeNode* root, double factor) {
if (!root) return;
root->employee->setSalary(root->employee->getSalary() * factor);
for (TreeNode* child : root->employee->children) {
adjustSalary(child, factor);
}
}