이번 포스팅에서는 Employee 클래스의 정의에 이어 구현 부분을 정리했습니다.(정의 부분은 아래 링크를 참고하세요)
[참고 : Employee 정의]
2023.01.31 - [프로그래밍/c++] - c++ 기초(직원 관리 시스템 - Employee 클래스 정의)
Employee 클래스 구현
맨 처음 생성자 부분부터 살펴보겠습니다. 초기화 부분은 생성자 이니셜라이저를 사용하였습니다.
(생성자 이니셜라이저 부분은 [클래스 정의] 포스팅의 "생성자와 소멸자"부분을 참고하시기 바랍니다.)
[참고]
2023.01.25 - [프로그래밍/c++] - c++ 기초(클래스 정의)
맨 처음 성과 이름을 매개변수로 받아 해당 멤버변수를 초기화합니다. 그리고 직원 번호는 -1로, 급여는 초기급여값으로 지정했으며, 채용되지 않은 상태(false)로 설정했습니다.
Employee::Employee(const string& firstName, const string& lastName)
: m_sFirstName(firstName)
, m_sLastName(lastName)
, m_nEmployeeNumber(-1)
, m_nSalary(kDefaultStartingSalary)
, m_bHired(false)
{
}
promote()와 demote()는 단순히 인수로 전달받은 값을 각각의 의미에 맞게 setSalary()에 넘겨주기만 합니다. 정의 시 매개변수에 default값을 할당해 주었던 부분은 구현 시에는 사라집니다. 이런 방식은 선언(정의)하는 코드에만 지정할 수 있습니다.
[선언 부분]
void promote(int raiseAmount = 1000000); //승진 시
void demote(int demeritAmount = 500000); //강등 시
[구현 부분]
void promote(int raiseAmount) //1000000을 할당하는 부분이 사라짐
{
setSalary(getSalary() + raiseAmount); //현재의 월급을 불러와서 raiseAmount만큼 더한다
}
void promote(int demeritAmount) //500000을 할당하는 부분이 사라짐
{
setSalary(getSalary() - demeritAmount); //현재의 월급을 불러와서 demeritAmount만큼 뺀다
}
hire()와 fire()는 고용 상태를 결정하는 메서드입니다. 고용 시 m_hired는 true값이 되고, 해고 시에는 false로 바뀝니다.
void Employee::hire()
{
m_bHired = true; // 직원 고용 : 고용된 상태로 바뀐다
}
void Employee::fire()
{
m_bHired = false; // 직원이 해고 : 해고된 상태로 바뀐다
}
display() 메서드는 현재 직원에 대한 정보를 콘솔 화면에 출력합니다. 동일 클래스 내에서 멤버 함수는 멤버 변수에 직접 접근할 수 있습니다. 예를 들어 m_nSalary값을 불러올 때 getSalary() 메서드를 쓰지 않고 m_nSalary를 써도 됩니다. 하지만 이에 대한 게터/세터가 정의 되어 있으면 같은 클래스 안이라도 이를 활용하는 것이 스타일 측면에서 바람직합니다.
void Employee::display() const
{
cout << "사원: " << getLastName() << ", " << getFirstName() << endl;
cout << "-----------------------------" << endl;
cout << "재직 상태 : " << (isHired() ? "재직 중" : "퇴 사") << endl;
cout << "사원 번호: " << getEmployeeNumber() << endl;
cout << "급여(월): " << getSalary() << "원" << endl;
cout << endl;
}
나머지 게터/세터의 구현에 대한 언급은 생략하겠습니다. 이에 대한 확인은 아래 전체코드를 참고하세요.
#include "stdafx.h"
#include <iostream>
#include "Employee.h"
namespace Records
{
Employee::Employee(const string& firstName, const string& lastName)
: m_sFirstName(firstName)
, m_sLastName(lastName)
, m_nEmployeeNumber(-1)
, m_nSalary(kDefaultStartingSalary)
, m_bHired(false)
{
}
void Employee::promote(int raiseAmount)
{
setSalary(getSalary() + raiseAmount); //현재의 월급을 불러와서 raiseAmount만큼 더한다
}
void Employee::demote(int demeritAmount)
{
setSalary(getSalary() - demeritAmount); //현재의 월급을 불러와서 demeritAmount만큼 뺀다
}
void Employee::hire()
{
m_bHired = true; // 직원 고용 : 고용된 상태로 바뀐다
}
void Employee::fire()
{
m_bHired = false; // 직원이 해고 : 해고된 상태로 바뀐다
}
void Employee::display() const
{
cout << "사원: " << getLastName() << ", " << getFirstName() << endl;
cout << "-----------------------------" << endl;
cout << "재직 상태 : " << (isHired() ? "재직 중" : "퇴 사") << endl;
cout << "사원 번호: " << getEmployeeNumber() << endl;
cout << "급여(월): " << getSalary() << "원" << endl;
cout << endl;
}
void Employee::setFirstName(const string& firstName)
{
m_sFirstName = firstName;
}
const string& Employee::getFirstName() const
{
return m_sFirstName;
}
void Employee::setLastName(const string& lastName)
{
m_sLastName = lastName;
}
const string& Employee::getLastName() const
{
return m_sLastName;
}
void Employee::setEmployeeNumber(int employeeNumber)
{
m_nEmployeeNumber = employeeNumber;
}
int Employee::getEmployeeNumber() const
{
return m_nEmployeeNumber;
}
void Employee::setSalary(int newSalary)
{
m_nSalary = newSalary;
}
int Employee::getSalary() const
{
return m_nSalary;
}
bool Employee::isHired() const
{
return m_bHired;
}
}
클래스 정의 부분이 namespace Records {...} 안에서 작성되었기 때문에 구현 부분도 반드시 동일한 네임스페이스 안에서 작성되어야 합니다. 네임스페스 부분은 아래 링크를 참조하세요
[참고 : 네임스페이스]
2022.12.22 - [프로그래밍/c++] - c++ 기초(namespace)
[참고]
1. 전문가를 위한 c++(개정4판) (저자 : 마크 그레고리 / 옮긴이 남기혁)
'Program Language > c++' 카테고리의 다른 글
C++ 기초(직원 관리 시스템 - Database 클래스) (19) | 2023.02.09 |
---|---|
C++ 기초(직원 관리 시스템 - 단위 테스트) (38) | 2023.02.07 |
c++ 기초(직원 관리 시스템 - Employee 클래스 정의) (12) | 2023.01.31 |
C++ 기초(유니폼 초기화) (16) | 2023.01.27 |
c++ 기초(클래스 정의) (9) | 2023.01.25 |
댓글