회원 클래스 정의 – 정적 멤버 캡슐화 [C++]

안녕하세요. 언제나 휴일에 언휴예요.

이번 예제는 정적 멤버 캡슐화를 다룰 거예요.

실습은 회원 클래스를 정의합니다.

회원 클래스 ㅏ이어그램

클래스 다이어그램에서 밑줄로 표시한 멤버가 정적 멤버입니다.

가장 최근에 부여한 회원 번호(lastnum)과 현재까지 생성한 회원 수를 반환하는 메세드(GetMemberCount)를 캡슐화할 거예요.

이 두 개의 멤버는 개체의 멤버가 아닌 형식의 멤버로 형식 이름으로 접근할 수 있어요.

/* https://ehpub.co.kr
   C++ 예제 - 언제나 휴일
   회원 클래스 정의 - 정적 멤버 필드 캡슐화
*/
#include 
#include 
using namespace std;
class Member
{
    static int last_num;
    const int num;
    string name;
public:
    static int GetMemberCount()
    {
        return last_num;
    }
    Member(string name) :num(++last_num)
    {
        this->name = name;
    }
    int GetNum()const
    {
        return num;
    }
    string GetName()const
    {
        return name;
    }
    virtual string ToString()const
    {
        char buf[256] = "";
        sprintf_s(buf, sizeof(buf), "번호:%04d 이름:%s", num, name.c_str());
        return buf;
    }
    bool IsEqual(int num)const
    {
        return this->num == num;
    }
    bool IsEqual(string name)const
    {
        return this->name == name;
    }
};

int Member::last_num;

int main()
{
    Member* marr[3];
    //회원 개체 생성
    marr[0] = new Member("홍길동");
    marr[1] = new Member("강감찬");
    marr[2] = new Member("이순신");
    //회원 목록 출력
    cout << "현재 회원 수:" << Member::GetMemberCount() << endl;
    for (int i = 0; i < 3; i++)
    {
        cout << marr[i]->ToString() << endl;
    }
    //회원 이름 검색
    string name;
    cout << "검색할 이름:";
    cin >> name;
    bool check = false;
    for (int i = 0; i < 3; i++)
    {
        if (marr[i]->IsEqual(name))
        {
            cout << marr[i]->ToString() << endl;
            check = true;
        }
    }
    if (check == false)
    {
        cout << "없습니다." << endl;
    }
    //회원 번호 검색
    int num;
    cout << "검색할 번호:";
    cin >> num;
    int i;
    for (i = 0; i < 3; i++)
    {
        if (marr[i]->IsEqual(num))
        {
            cout << marr[i]->ToString() << endl;
            break;
        }
    }
    if (i == 3)
    {
        cout << "없습니다." << endl;
    }
    //회원 개체 소멸
    for (int i = 0; i < 3; i++)
    {
        delete marr[i];
    }
    return 0;
}