LANG/C++

[C++]06-3.C++에서의 static

혀니리리 2023. 5. 13. 15:46
728x90

C언어에서 얘기한 static

1)전역변수에 선언된 static의 의미

 -> 선언된 파일 내에서만 참조를 허용하겠다는 의미

2)함수 내에 선언된 static의 의미

 ->한번만 초기화되고, 지역변수와 달리 함수르 빠져나가도 소멸 x

 

if static 없이 전역변수 선언하는 경우
 제한을 지켜줄만한 아무런 장치도 존재 x -> 문제 일으킬 소지 매우 높음

 

static 멤버변수(클래스 변수)

if

class SoSimple
{
private:
	static int simObjCnt; //static 멤버변수, 클래스 변수
public:
	SoSimple()
    {
    	simObjCnt++;
        cout << simObjCnt <<"번째 SoSimple 객체" <<endl;
    }
};
int SoSimple::simObjCnt=0; //static 멤버변수의 초기화

이렇게 만들었을 경우 다음과 같이 총 3개의 SoSimple객체를 생성하면

int mian(void)
{
	SoSimple sim1;
	SoSimple sim2;
	SoSimple sim3;
     . . .
}

세 개의 객체가 static변수 simObjCnt를 공유하는 구조가 됨.

이렇게 하면 객체 내에 simObjCnt가 존재하는 것은 아니고 변수는 객체 외부에 있지만 객체에게 멤버변수처럼 접근권한을 줬을 뿐 전역변수와 하는 일 동일!!

 

static멤버변수의 또다른 접근방법

static 멤버가 private으로 선언되면 해당클래스 객체들만 접근이 가능하지만, public으로 선언되면 클래스의 이름 또는 객체의 이름을 통해서 어디서든 접근이 가능.

 

const static 멤버

클래스 내에 선언된 const 멤버변수(상수)의 초기화는 이니셜라이즈를 통해야만 함.

그러나 const static으로 선언되는 멤버변수(상수)는 선언과 동시에 초기화 가능

 

키워드 mutable

const함수 내에서의 값의 변경을 예외적으로 허용

많이 사용하면 안됨.

728x90