C++/C++ 예제

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

언제나휴일 2020. 7. 15. 20:33
반응형

 

회원 클래스 다이어그램

 

/* https://ehpub.co.kr
   C++ 예제 - 언제나 휴일
   회원 클래스 정의 - 정적 멤버 필드 캡슐화
*/
#include <string>
#include <iostream>
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;
}

 

반응형