본문 바로가기

C++

static ?

Static Function (정적 함수)

class A
{
public :
    A()  {}
    ~A() {}

private:
    int m_iData;
    static int m_stIData;
	
public:
    static void Static_Print()
    {
        //m_iData = 10; // 에러 : 정적 함수 내부에서는 일반 멤버 변수를 사용할 수 없다.
        m_stIData = 10;	// 컴파일 성공 : 정적 변수는 사용 가능하다.
    }

    void This_Print()
    {
    }
};

int main()
{
    A instA;

    // 정적 함수를 호출하는 방법
    A::Static_Print();
    instA.Static_Print();

    A::This_Print();    // 에러 : 멤버 함수는 객체로 통해서만 접근이 가능하다
    instA.This_Print(); // 컴파일 성공
    
    return 0;
}

 

- 클래스 정적 함수는 내부에서 멤버를 사용할 수 없다. this*가 존재하지 않는다.

- 외부에서 호출 시 위 코드처럼 객체. 접근도 가능하지만 일반적으로 클래스명:: 으로 접근한다. 

Static Variable (정적 변수)

class A
{
public:
    A()  {}
    ~A() {}

private:
    int m_iData;
    static int m_stIData = 10; // 에러 발생
};

int A::m_stIData = 10;         // 컴파일 성공
class A
{
private:
    static int m_stIData;

public:
    void This_Print()
    {
        m_stIData++;
        cout << "IData : " << m_stIData << endl;
    }
};

int A::m_stIData = 0;

int main()
{
    A instA;
    instA.This_Print();
    instA.This_Print();
    instA.This_Print();

    return 0;
}

결과
IData : 1
IData : 2
IData : 3

 

- 클래스 내부에서 변수를 초기화 할 수 없다. (클래스 외부에서 초기화 할 수 있다.)

- 함수 내에서 정적 변수를 선언했다면 해당 변수는 데이터 메모리 영역에 공간이 할당되며 함수가 종료되어도 해제되지 않는다.