티스토리 뷰

C /C++

[C++] Static 멤버

진저 에일 2019. 6. 24. 20:27
  • non-static 멤버 (static이 아닌 멤버)는 객체가 생성될 때 생성되고, 각 객체마다 별도로 생성된다. 즉, 객체가 죽으면 (소멸되면) 이 멤버도 죽는다.
    • 인스턴스(instance) 멤버라고도 부름.
    • 공유되지 않음.
  • 하지만 static 멤버는 객체의 멤버이지만, 객체가 생기기 전에 이미 생성되어 있고 객체가 죽어도 죽지 않는다.
    • 클래스(class) 멤버라고도 부름.
    • 동일 클래스(class)의 모든 객체들에 의해 공유됨.

// static 멤버는 이렇게 선언한다. 즉, static이 붙지 않으면 전부 non-static 임.

class Person

{

public:

    // 생략

    static int sharedMoney;

    static void addShared (int n) { sharedMoney += n; }

    // 생략

};


// 사용하려면 외부에 전역(global) 변수로 선언해야한다.

int Person::sharedMoney = 10;


// 사용법 ① .과 -> 사용하기

int main()

{

    Person lee;

    lee.sharedMoney = 500; // dot 연산자 (. 사용)


    Person *p;

    p = &lee;

    p->addShared(200); // arrow 연산자 (-> 사용)

}


//사용법 ② 클래스명:: 사용하기

int main()

{

    Person::sharedMoney = 200; // 클래스 명 (Person)과

    Person::addShared(200); // scope 연산자 (::)

}


  • static으로 캡슐화하기
    • C++은 C와의 호환성 때문에 100% 캡슐화 하지 못한다.
    • 그렇기 때문에 사용자가 직접 캡슐화를 해준다. (전역 변수, 전역 함수 사용X)
  • static 멤버로 선언하면 캡슐화가 된다.
class Math
{
public:
    static int abs(int a) { return a>0?a:-a; }
    // a>0가 true이면 a라고 반환, false이면 -a라고 반환.
    static int max(int a, int b) { return (a>b)?a:b; }
    // a>b가 true이면 a를 반환, false이면 b를 반환.
    static int min(int a, int b) { return (a>b)?b:a; }
    // a>b가 true이면 b를 반환, false이면 a를 반환.
};

int main()
{
    std::cout << Math::abs(-5) << std::endl; //5
    std::cout << Math::max(10, 8) << std::endl; // 10
    std::cout << Math::min(-3, -8) << std::endl; // -8
}

  • static 멤버 함수는 오직 static 멤버들만 접근이 가능하다.
    • 즉 non-static인 멤버가 접근하면 오류가 뜬다.
  • static 멤버 함수에서는 this pointer를 사용할 수 없다.
// 앞에 왕창 생략
static void addShared(int n) {
    this->sharedMoney += n; // 오류
}


'C /C++' 카테고리의 다른 글

[C][Stack] 백트래킹을 이용한 길찾기/미로찾기  (0) 2019.12.05
[C] fgets()  (0) 2019.06.24
[C][과제] 숫자야구 ++  (0) 2018.10.28
[C/C++][과제] 숫자야구  (0) 2018.10.13
[C/C++][과제?] 오목 중간 백업  (0) 2018.08.29
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함