CafeM0ca

[C++]class static 멤버변수 본문

Programming/C++

[C++]class static 멤버변수

M0ca 2018. 1. 6. 20:38
반응형

static을 C에서 재귀함수에서 전역변수 대신 지역변수로 선언하여 사용하고 하는데 책을 읽던 중 재밌는 사실이 있더라


static은 프로그램이 종료할 때 까지 남아있다.

1
2
3
4
void Function(){
    static int n=1;
    n++;
}

cs

Function함수는 n값을 실행시킬때마다 1씩 증가시킨다. 



class에서 멤버변수로 static선언을 하면 어떻게 될까.

1
2
3
4
5
6
7
8
class Student{
private:
    char *name;
    int age;
    static int total;
public:
    //생략
};
cs

Student라는 객체를 만들었고 이름과 나이를 저장할 수 있다. 여기서 total은 학생 수를 나타낸다.


1
2
3
4
5
6
7
int main(void){
    Student s1;
    Student s2;
    Studnet s3;
    return 0;
}
 
cs

메인함수에서 Student 객체를 3개를 생성했다. 각각의 객체들은 name과 age를 갖겠지만 total을 공유한다! 즉, name과 age는 학생이 3명이므로 각각 3개씩 존재하지만 total은 1개다.


static member function은 this pointer가 없다. 이유는 각자 잘 생각해보자. 왜냐하면 this는 owner가 있는데 가리키는건데 static은 누구의 것도 아니다.

또한 private나 protected의 static member data나 non-static member data에 접근 할 수 있다.

int main()
{
    std::cout << "It is possible. Becasue WhoAmI() is static func!" << std::endl;

    Student::WhoAmI();

    return 0;

}



반응형

'Programming > C++' 카테고리의 다른 글

[C++]boost라이브러리 설치와 컴파일  (0) 2018.01.25
[C++]형변환(typecasting)  (0) 2018.01.22
[C++]mutable  (0) 2018.01.04
[C++]템플릿  (0) 2018.01.03
[C++] 런타임 과정에서의 입력 값  (0) 2017.12.02
Comments