본문 바로가기

정보정보

Class에서 static 변수의 쓰임


/*
PersonalCount3.cpp
*/

#include<iostream>
using std:cout;
using std:endl;

Class person
{
       char name[20];
       int age;
     static int count;

public:
      person(char* _name,int _age)
     {
          strcpy(name,_name);
          age = age;
          cout<<count++<<" th personal create"<<endl;
     }

    void show()
    {
         cout<<"name :"<<name;
         cout<<"year :"<<age;
     }

};

int Person::count = 1;    //static person member init

int main(void)
{
       Person p1("Lee",13);
       Person p1("Hong",22);
       return 0;
}



실행결과 :
1 th personal create
2 th personal create





static 멤버의 특징



다음은 static 멤버가 가지는 특징들이다.

1) main 함수가 호출되기도 전에 메모리 공간에 올라가서 초기화된다.
따라서 public 으로 선언이 된다면, 객체 생성 이전에도 접근이 가능하다

2)객체의 멤버로 존재하는 것이 아니다.
다만 선언되어 있는 클래스 내에서 직접 접근할 수 있는 권한이 부여된 것이다.


//덧붙임!


지역변수는 선언되어 있는 함수가 호출되어야 메모리 상에 올라가게 되고
객체는 생성되어야 메모리 공간에 올라가는데,
Static 멤버는 main 함수가 호출되기 이전에 이미 메모리 공간에 올라가서 초기화된다는
특징을 지닌다.
(마치 전역변수처럼)

따라서 위의 예제를 실행하면 main 함수가 호출되기도 전에 메모리 공간에 올라가 있게 된다.
따라서  CPP에서는  static 멤버 초기화는 'static 멤버 초기화'라는 문법적 요소를 제공한다.(2번째 붉은표시)

그리고 이후에,
선언되지 않는 클래스 사용 밖에서도,
(초기화 이후에)
'Person::count' 이렇게 사용해서 선언되지 않는 클래스라도 static 변수는 사용가능하다.
(위에서 말했듯이 main 함수가 실행되기도 전에  생성되어 있기때문에)




From. 열혈강의 C++
꽤 중요한 개념이기에 적어봤다.ㅋ
다음은 const 개념.을 적어보도록 하겠다.ㅋ