[C++] static

dd_ddong·2022년 7월 23일
0

c++

목록 보기
23/38

c언어에서의 static

전역변수의 static 선언 -> 선언된 파일 안에서만 접근가능
함수 내 변수 static 선언 -> 한번만 초기화 되고 함수호출 끝나도 소멸 X

c++ static

멤버변수에 static선언을 해 클래스 변수로 만들기도 한다.

class Simple
{
private:
	static int num1;
public:
	static int num2;
}

static은 private, public 둘 다 선언가능하다.

class에 선언된 static 변수의 경우 class의 객체가 늘어난다고 객체마다 멤버변수가 생기지 않고 메모리공간에 한 번 할당되어 공유하는 변수다.

Simple AAA;
Simple BBB;
Simple CCC;

위와 같이 3개의 객체를 생성해도 num1, num2를 메모리 상 하나만 존재하고 객체와 독립적으로 존재한다.

static 멤버변수의 특성

  1. 클래스이름::static변수 를 통해 접근 가능하다. (class 안에서는 변수이름만으로 접근)
  2. 객체가 없어도 메모리 상 존재한다.
  3. 객체와 독립적이므로 별도의 초기화코드가 필요하다. (int Simple::num1 = 5;)

static 함수

멤버함수도 static 선언할 수 있다.
멤버변수와 특징이 똑같지만 한 가지 추가되는 점이 있다.

static 함수 안에서 멤버변수에 접근 불가능하다. 오직 static 멤버만 접근가능하다.

멤버함수의 경우 객체와 독립적이기 때문에 객체가 생성되지 않았어도 호출가능하다.
근데 멤버함수안에 멤버변수가 있다면 있지도 않은 메모리에 접근해야되기 때문에 오류가 발생한다.
설령 객체가 있다 하더라도 어떤 객체의 변수에 접근해야할지 모르기 때문에 접근자체를 막아버렸다.

const static 멤버

선언과 동시에 초기화 가능

class Simple
{
	const static int AAA = 4004;
}

int main()
{
	cout << Simple::AAA;
    
}

mutable

mutable키워드가 붙은 멤버변수는 const 함수 내에서 값의 변경을 허용한다.

class Simple
{
private:
	int num1;
    mutable int num2;
public:
	void Method() const
    {
    	//num1 = 5; 에러
        num2 = 5;  //가능
    }
    
}

사용을 자제하자.

0개의 댓글