回顾:员工层次结构
本课属于 Coddy C++ 学习旅程的“面向对象编程”单元。第 55 课,共 104 课。
挑战
简单让我们构建一个完整的员工层级系统,将你在本章学到的所有继承概念结合起来。你将创建一个包含不同员工类型的公司结构,这些员工拥有共同的属性,但行为各不相同。
你将把代码分成 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 个输入(每个输入单独占一行):- 经理姓名
- 经理 ID
- 经理基本工资
- 开发者姓名
- 开发者 ID
- 开发者基本工资
创建一名团队人数为 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++ 在线编译器