static 은 변수에 선언하거나, 함수에 선언할 수 있다.
- static으로 지정된 멤버는 생명주기가 전역 변수로 바뀐다.
- 모든 객체에서 공유하여 사용한다.
- 객체를 선언하지 않고 사용한다.
- 객체 소유가 아니므로 this 포인터를 사용할 수 없다.
예제1.
#include <iostream> using namespace std;
void Counter() { int count = 0; cout << " " << count++; }
void Counter2() { static int count = 0; cout << " " << count++; }
class ABC { public: int a; static int counter; // 여기에서 0 할당하면 에러가 발생한다. void getABC() { a = counter; cout << "a = " << a << endl; } };
int ABC::counter = 0; // 클래스 외부에서 전역 변수처럼 초기화시켜야 한다.
int main() { for (int i = 0; i < 5; i++) { Counter(); // 함수가 호출될 때마다 값이 초기화 됨 } cout << endl;
for (int i = 0; i < 5; i++) { Counter2(); // main()함수가 종료되기 전까지 값을 유지 } cout << endl;
ABC abc = ABC(); // 객체 생성 for (int i = 0; i < 5; i++) { abc.getABC(); // 함수 호출 ABC::counter++; // couter 값 증가 } } |
static 변수를 적용한 것과 적용하지 않은 경우 값의 결과를 출력해서 확인할 수 있도록 해봤다.