요약 - 직원 계층 구조
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 104개 중 55번째.
챌린지
쉬움이 장에서 배운 모든 상속 개념을 하나로 묶는 완전한 직원 계층 시스템을 구축해 보겠습니다. 공통된 속성을 공유하지만 특화된 동작을 가진 다양한 직원 유형으로 구성된 회사 구조를 만들 것입니다.
코드는 네 개의 파일로 구성됩니다:
Employee.h: 모든 직원 유형이 상속받을 기본Employee클래스를 정의합니다. 모든 직원은 이름, ID, 기본 급여를 가집니다. 다음을 포함하세요:- 이름(
std::string), id(int), baseSalary(double)를 위한 protected 멤버 - 세 가지 값을 모두 초기화하는 생성자
Employee: <name> (ID: <id>)를 출력하는 가상displayInfo()메서드- 기본 급여를 반환하는 가상
calculateSalary()메서드 - 가상 소멸자
- 이름(
Manager.h:Employee를 public 상속받는Manager클래스를 정의합니다. 매니저는 팀 규모에 따라 보너스를 받습니다:- private
int teamSize멤버 - 이름, id, 기본 급여, 팀 규모를 인자로 받는 생성자 — 기본 생성자를 적절하게 체이닝하세요
Manager: <name> (ID: <id>) - Team of <teamSize>를 출력하도록displayInfo()를 오버라이드- 기본 급여에 팀원 한 명당 500을 더한 금액을 반환하도록
calculateSalary()를 오버라이드
- private
Developer.h:Employee를 public 상속받는Developer클래스를 정의합니다. 개발자는 전문 언어를 가지며 기술 보너스를 받습니다:- private
std::string language멤버 - 이름, id, 기본 급여, 프로그래밍 언어를 인자로 받는 생성자
Developer: <name> (ID: <id>) - <language>를 출력하도록displayInfo()를 오버라이드- 기본 급여에 1000의 기술 보너스를 더한 금액을 반환하도록
calculateSalary()를 오버라이드
- private
main.cpp: 여섯 개의 입력을 읽습니다 (각각 별도의 줄에 입력됨):- 매니저 이름
- 매니저 ID
- 매니저 기본 급여
- 개발자 이름
- 개발자 ID
- 개발자 기본 급여
팀 규모가 4인 매니저와 "C++"을 전문으로 하는 개발자를 생성합니다. 두 객체의 포인터를
Employee*포인터 배열에 저장합니다. 배열을 루프하며 각 직원에 대해displayInfo()를 호출하고 계산된 급여를 다음 형식으로 출력합니다:<displayInfo output> Salary: <displayInfo output> Salary: $<calculated salary>lt;calculated salary>직원들 사이에 빈 줄을 출력하세요. 모든 직원을 표시한 후, 동적으로 할당된 객체들을 적절히 삭제(delete)하세요.
예를 들어, 입력값이 Sarah, 101, 5000, Mike, 102, 4500인 경우:
Manager: Sarah (ID: 101) - Team of 4
Salary: $7000
Developer: Mike (ID: 102) - C++
Salary: $5500이 챌린지는 다형성(polymorphism)의 실제 작동 방식을 보여줍니다. 기본 클래스 포인터를 통해 가상 메서드를 호출하면 올바른 파생 클래스의 구현이 실행됩니다. 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: $<calculated salary>
// - 직원 사이에 빈 줄 출력 (마지막 직원 뒤에는 출력하지 않음)
// TODO: 동적으로 할당된 객체들 삭제
return 0;
}