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
- 클래스 내부에서 변수를 초기화 할 수 없다. (클래스 외부에서 초기화 할 수 있다.)
- 함수 내에서 정적 변수를 선언했다면 해당 변수는 데이터 메모리 영역에 공간이 할당되며 함수가 종료되어도 해제되지 않는다.
'C++' 카테고리의 다른 글
C++ Type Cast (0) | 2019.07.17 |
---|---|
얕은 복사(Shallow Copy) 깊은 복사(Deep Copy) (0) | 2019.07.12 |
복사 생성자(Copy Constructor) (0) | 2019.07.11 |
레퍼런스(Reference)와 포인터(Pointer) 차이 (0) | 2019.07.10 |
다중 상속(Diamond of Death)의 문제점 (0) | 2019.07.10 |