Menu
CoddyTech

回顾:员工层次结构

本课属于 Coddy C++ 学习旅程的“面向对象编程”单元。第 55 课,共 104 课。

challenge icon

挑战

简单

让我们构建一个完整的员工层级系统,将你在本章学到的所有继承概念结合起来。你将创建一个包含不同员工类型的公司结构,这些员工拥有共同的属性,但行为各不相同。

你将把代码分成 4 个文件:

  • Employee.h:定义所有员工类型的基类 Employee。每位员工都有姓名、ID 和基本工资。需要包含:
    • 受保护的成员:姓名(std::string)、id(int)和 baseSalary(double)
    • 初始化这 3 个值的构造函数
    • 虚方法 displayInfo(),输出:Employee: <name> (ID: <id>)
    • 虚方法 calculateSalary(),返回基本工资
    • 虚析构函数
  • Manager.h:定义一个公有继承自 Employee 的 Manager 类。经理会根据团队人数获得奖金:
    • 一个私有成员 int teamSize
    • 构造函数接收姓名、id、基本工资和团队人数,并正确调用基类构造函数
    • 重写 displayInfo(),输出:Manager: <name> (ID: <id>) - Team of <teamSize>
    • 重写 calculateSalary(),返回基本工资加上团队中每位成员对应的 500
  • Developer.h:定义一个公有继承自 Employee 的 Developer 类。开发者有专长的编程语言,并会获得技能奖金:
    • 一个私有成员 std::string language
    • 构造函数接收姓名、id、基本工资和编程语言
    • 重写 displayInfo(),输出:Developer: <name> (ID: <id>) - <language>
    • 重写 calculateSalary(),返回基本工资加上 1000 的技能奖金
  • main.cpp:读取 6 个输入(每个输入单独占一行):
    1. 经理姓名
    2. 经理 ID
    3. 经理基本工资
    4. 开发者姓名
    5. 开发者 ID
    6. 开发者基本工资

    创建一名团队人数为 4 的经理,以及一名专长语言为 "C++" 的开发者。将指向两人的指针存储在一个 Employee* 指针数组中。遍历数组,调用 displayInfo(),并按以下格式输出每位员工计算后的工资:

    <displayInfo output>
    Salary: $<calculated salary>

    在两位员工的信息之间输出一个空行。显示完所有员工的信息后,正确删除动态分配的对象。

例如,输入 Sarah、101、5000、Mike、102 和 4500 时:

Manager: Sarah (ID: 101) - Team of 4
Salary: $7000

Developer: Mike (ID: 102) - C++
Salary: $5500

这个挑战展示了多态的实际应用:通过基类指针调用虚方法时,会执行正确的派生类实现。记得使用 override 关键字,并在基类中包含虚析构函数,以便正确清理对象。

亲手试试

#include <iostream>
#include <string>
#include "Employee.h"
#include "Manager.h"
#include "Developer.h"

using namespace std;

int main() {
    // 读取 Manager 的输入
    string managerName;
    int managerId;
    double managerSalary;
    
    getline(cin, managerName);
    cin >> managerId;
    cin >> managerSalary;
    cin.ignore();
    
    // 读取 Developer 的输入
    string developerName;
    int developerId;
    double developerSalary;
    
    getline(cin, developerName);
    cin >> developerId;
    cin >> developerSalary;
    
    // TODO:创建一个团队人数为 4 的 Manager 对象
    // TODO:创建一个擅长 "C++" 的 Developer 对象
    
    // TODO:创建一个 Employee* 指针数组,存储这两名员工
    
    // TODO:遍历数组,对每名员工:
    //   - 调用 displayInfo()
    //   - 输出:Salary: $<计算出的薪资>
    //   - 在员工之间输出一个空行(最后一名员工之后不要输出)
    
    // TODO:删除动态分配的对象
    
    return 0;
}

面向对象编程中的所有课

自己练习: C++ 在线编译器