[디딤돌 C++] 24. 캡슐화 최종 실습 – 멤버 메서드

이제 시나리오를 보면서 멤버 메서드를 결정하세요. 여기에서는 메서드 이름과 입력 매개 변수 리스트 및 반환 형식까지 결정하세요. 메서드 내부를 구체적으로 결정하는 부분은 테스트 코드 작성 후에 맨 마지막에 할 거예요. 먼저 혼자 해 본 후에 비교해 보세요.

먼저 다른 형식에서 접근 가능하게 접근 지정자 public:을 명시하세요.

public:

생성할 때 이름을 입력받으므로 이를 반영하여 생성자 메서드를 결정하세요.

    Student(string name);//생성자

“공부하다.”, “강의받다.”, “잠자다.”, “휴식하다.”, “음료마시다.”, “노래하다.” 기능에 맞게 메서드 명을 결정하세요. 입력 매개 변수와 반환 형식은 특별히 전달할 것이 없네요.

    void Study();//공부하다.
    void ListenLecture();//강의받다.
    void Sleep();//잠자다.
    void Relax();//휴식하다.
    void Drink();//음료마시다.
    void Sing();//노래하다.

접근자 메서드는 Get으로 시작하고 반환할 데이터에 맞게 메서드 이름을 정하세요. 그리고 접근자는 개체의 상태를 변경하지 않으므로 const 멤버 메서드로 정하세요. 반환 형식은 목적에 맞게 정하세요.

    string GetName()const;//이름 접근자
    int GetPN()const;//주민번호 접근자
    int GetIQ()const;//지력 접근자
    int GetHP()const;//체력 접근자
    int GetStress()const;//스트레스 접근자

여기에서는 구체적인 구현을 들어가지 않았기 때문에 접근 지정이 private 인 멤버 메서드는 없습니다. 하지만 뒤에서 구체적인 구현을 하면서 필요한 것들은 private으로 접근 지정할 거예요.

소스 코드에도 메서드를 추가하고 컴파일 오류가 발생하지 않게 하세요.

먼저 생성자에서는 비정적 상수화 멤버 필드를 초기화를 해야 컴파일 오류가 발생하지 않습니다.

Student::Student(string name):pn(++last_pn)
{
}

접근자 메서드들은 목적에 맞게 적절한 값을 반환하세요. 다음은 멤버 메서드를 추가한 후에 전체 소스 코드 내용이예요.

//Student.h
#pragma once
#include <string>
using namespace std;

class Student
{
    const int pn;//주민번호
    static int last_pn;//가장 최근에 부여한 주민 번호
    string name;//이름
    int iq;//지력
    int hp;//체력
    int stress;//스트레스
    int scnt;//연속으로 공부한 횟수

    //능력치의 디폴트, 최소, 최대값
    static const int def_iq;
    static const int min_iq;
    static const int max_iq;

    static const int def_hp;
    static const int min_hp;
    static const int max_hp;

    static const int def_stress;
    static const int min_stress;
    static const int max_stress;

    static const int def_scnt;
    static const int min_scnt;
    static const int max_scnt;
public:
    Student(string name);//생성자
    void Study();//공부하다.
    void ListenLecture();//강의받다.
    void Sleep();//잠자다.
    void Relax();//휴식하다.
    void Drink();//음료마시다.
    void Sing();//노래하다.
    string GetName()const;//이름 접근자
    int GetPN()const;//주민번호 접근자
    int GetIQ()const;//지력 접근자
    int GetHP()const;//체력 접근자
    int GetStress()const;//스트레스 접근자
};

//Student.cpp
#include "Student.h"

int Student::last_pn;
const int Student::def_iq=100;
const int Student::min_iq=0;
const int Student::max_iq=200;
const int Student::def_hp=100;
const int Student::min_hp=0;
const int Student::max_hp=200;
const int Student::def_stress=0;
const int Student::min_stress=0;
const int Student::max_stress=100;
const int Student::def_scnt=0;
const int Student::min_scnt=0;
const int Student::max_scnt=5;

Student::Student(string name):pn(++last_pn)
{
}

void Student::Study()
{
}

void Student::ListenLecture()
{
}

void Student::Sleep()
{
}

void Student::Relax()
{
}

void Student::Drink()
{
}

void Student::Sing()
{
}

string Student::GetName()const
{
    return name;
}

int Student::GetPN()const
{
    return pn;
}

int Student::GetIQ()const
{
    return iq;
}

int Student::GetHP()const
{
    return hp;
}

int Student::GetStress()const
{
    return stress;
}
//Program.cpp
#include "Student.h"

int main()
{
    return 0;
}