。공부 。

<C++> Static 의 특징

kyoe 2007. 12. 9. 20:33
static은 전역변수와 전역함수를 대체하기위해서 등장했다.
static을 간단히 설명하면 static으로 선언한 변수와 함수는 공유할수 있다는것이다.

[ STATIC 의 특징 ]
- 클래스 변수, 클래스 함수라한다.
- main 함수 호출이전에 메모리 공간에 할당되서 초기화(전역변수와 동일)
- 선언된 클래스의 객체내에 직접 접근 허용
- static 멤버 초기화 문으로 초기화 해야한다.

- static를 적용한 예 -
class Student{
    int num;
    static int count;
public:
    Student(int _num){       
        num = _num;
        cout<<"count : "<<count++<<endl;
    }
};
int Student::count = 1; //static변수 초기화 '::' ->범위 연산자.

int main(void){
    Student kyoe1(24);
    Student kyoe2(2007);
    return 0;
}
Student클래스에서 변수 count를 static선언하고 있다 static선언과 동시에 count변수는  공유되어진다고 생각하자 메인 함수에서 두개의 객체를 생성하고 있는데 객체생성과 동시에 count변수를 1씩 올려주는것을 알수 있다 만약 count를 static선언하지 않았다 count변수는 각각의 객체에 독립적으로 들어가게 되고 실행결과 역시 count의 값은 똑같이 1이 될것이다 하지만 여기서 우리는 count변수를 static선언해주었다 static선언해주면 객체 생성시 count변수가 객체에 하나씩 할당이 되는것이 아니라 한개의 count변수를 참조하게 되는것이다 Student클래스의 모든객체는 count변수 한개만을 갖고 서로 공유하면서 쓴다는것이다. 위 예제를 실행하면 count : 1 , count : 2 이와 같이 서로의 값이 1씩 증가한 값이 나오는것을 알수있다.
static변수는 생성자내에서 초기화 할수없다 생성자 내에서 초기화를 하면 객체가 생성될때마다 static 변수의 값은 매번 리셋 되어지기 때문이죠..
int Student::count = 1 이와 같은 식으로 static변수를 초기화 해야하는것이다.