Steady Blog

19. 정적변수 본문

Programing/C++

19. 정적변수

우유먹고쑥 2012. 9. 4. 00:02

*정적 변수


<*참고*> 변수의 위치

 

1. 지역변수   - 선언된 함수 안에서만 사용 가능

2. 전역변수   -모두 함수안에서 사용 가능

3. static 변수(정적 변수)

     - 함수 내에 선언된 변수를 말함.   //지역변수 특징

     - 함수 내에서만 사용이 가능하다. //지역 변수 특징

     ㄱ) 변수를 선언하면 메인 함수가 수행되기 이전에 변수가 생성되며,

         프로그램이 종료될 때 메모리에서 소멸 된다.           // 전역 변수 특징

     ㄴ) 초기화 시키지 않아도 자동 초기화 됨

     ㄷ) 매개변수 기재 부분에는 static변수를 선언 할수 없다.

 

int a; //전역변수

void ex()

{

    int b; // 지역변수

}


 정적 맴버 -클래스 내 static을 붙여 선언한 맴버를 정적맴버라 하는데 정적맴버는 클래스 내에 선언된 맴버지만

                클래스의 맴버는 아니다.

정적맴버는 main 함수가 호출되기 전 메모리 공간에 올라가서 초기화 되기 때문에 객체 생성과는 상관없이 사용할 수 있다.

 

정적 맴버의 특징

1) 정적 맴버 외부 정의시 static 키워드는 선언부에만 쓴다.

2) 정적 맴버함수는 정적 맴버 변수만 접근할수 있다.

3) 정적 맴버변수의 초기화는 맴버 함수 내에서 할수 없다. ( 객체 생성이전에 메모리가 할당하기 때문)

 

 


<연습 예제>

  static 연습.

class point
{
     static int cnt;   // class의 맴버 함수만 접근이 가능하다.
     int x,y;
public:
     point(int _x, int _y);
     void OutPointInfo() const;
     static void OutPointCount();     //static 이 없으면 cnt에 접근이 안된다.
};


int point::cnt = 0; 
// static 변수 초기화

 

point::point(int _x, int _y):x(_x),y(_y) // cnt++를 바로 옆에 못쓰는 이유는 맴버변수만 이용이 가능하기 때문이다.
{
     cnt++;
}


void point::OutPointInfo() const
{
     cout<<"x = "<<x<<", y= "<<y<<endl;
}


void point::OutPointCount()
{
     cout<<"생성된 좌표는 "<<cnt<<"개 입니다.\n";
}


void ch9_03()
{
     point::OutPointCount();
     point p1(50,50);
     point::OutPointCount();
     point p2(20,60);
     point p3(30,80);
     point::OutPointCount();
     p1.OutPointInfo();
     p2.OutPointInfo();
     p3.OutPointInfo();
}

 

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

21. 상속 part 2 ---정리 필요함.  (0) 2012.09.04
20. 상속  (0) 2012.09.04
18. const변수  (0) 2012.09.04
17. 생성자, 소멸자  (0) 2012.09.04
14. 포인터 배열  (0) 2012.09.04