static과 클래스
-> static 변수의 초기화는 전역에서 진행한다.
static 변수는 Data 영역에 등록이 된다.
-> 프로그램 시작 시 메모리에 등록된다.
-> 사용자가 객체를 몇개 만들지 알 수 없는 상황이기 때문에
-> 컴파일러가 static 변수를 여러개 만들 수 없다.
-> 그래서, 단 하나만 메모리에 등록시킨 후 해당 클래스로 만든 모든 객체가 static 변수를 공유한다.
static 변수의 초기화
class CObj
{
public:
CObj() {}
CObj(int _a) : m_a(_a) // 불가능
{
}
private:
static int m_a;
};
static 변수는 이니셜라이즈를 통해 초기화가 불가능하다.
왜냐하면 static 변수는 프로그램 시작 시 Data영역에 메모리 할당이 되고,
생성자의 호출 시점은 런타임 중 객체를 만드는 시점에 메모리에 등록이 되기 때문이다.
static 변수의 초기화 방법은 다음과 같다.
class CObj
{
public:
CObj() {}
CObj()
{
}
private:
static int m_a;
};
int CObj::m_a = 10; // static 변수의 초기화
static 변수는 전역 변수로 초기화를 진행한다.
static 멤버 함수
-> static 멤버 함수/변수는 객체를 생성하지 않아도 접근 지정자가 public이면
static 멤버 함수/변수의 접근이 가능하고, 일반 함수/멤버 변수의 접근이 불가능하다.
-> 단, 일반 멤버 함수 내부에서는 static 멤버 함수/변수 접근이 가능하다.
class CObj
{
public:
CObj() {}
static void Static_Func()
{
// 멤버 함수
Static_Func(); // 가능
Func(); // 불가능
// 멤버 변수
m_StaticA = 10; // 가능
m_a = 10; // 불가능
}
void Func()
{
// 멤버 함수
Static_Func(); // 가능
Func(); // 가능
// 멤버 변수
m_StaticA = 10; // 가능
m_a = 10; // 가능
}
private:
static int m_StaticA;
int m_a;
};
static과 const의 차이점
static
-> 선언을 하게 되면 위치와 상관없이 프로그램의 시작부터 끝까지 메모리에 할당되어 있고,
-> 그 값을 마음대로 바꿀 수 있다.
-> 위치에 대해서는 전역변수든 지역변수든 상관 없다.
const
-> 해당 변수를 초기화한 이후에는 절대로 바꾸지 못하도록 선언하는 것
-> 초기화가 되고나면 그 이후에는 값을 바꿀 수 없게 된다.
'Programming > C++ Basic' 카테고리의 다른 글
C++ this 포인터, extern 키워드 (0) | 2020.09.16 |
---|---|
C++ 복사 생성자(얕은 복사, 깊은 복사) (0) | 2020.09.16 |
C++ const 와 클래스, 멤버 함수 (0) | 2020.09.15 |
C++ 파일 입출력(fopen_s, fread(), fwrite()) (0) | 2020.09.13 |
C++ 전방 선언 (0) | 2020.09.13 |