static 키워드
2020. 6. 17. 19:55ㆍ프로그래밍/C++
static 변수
범위(scope)의 제한을 받는 전역 변수
> 메모리의 Data 영역에 저장 됨
> exe 안에 딱 하나만 있는 변수
어떤 범위?
> 파일 속
> 네임스페이스 속
> 클래스 속
> 함수 속
extern 키워드
> 다른 파일의 전역변수에 접근을 가능케 해줌
C 스타일 static
> 정적 변수가 함수 밖에 있다면, extern 써도 이 정적 변수에 접근할 수 없음
함수 속 정적 변수
함수로 범위(scope)가 제한된 전역 변수
void Accumulate(int number)
{
static int result = 0; // 딱 한번만 수행.
// 한 번 초기화한 static 변수는 다시 초기화 하지 않고
// 코드 라인을 건너 뜀
result += number;
// ...
}
int main()
{
// ...
// (result에 접근 불가)
}
정적 멤버 변수
클래스당 하나의 COPY만 존재
개체의 메모리 레이아웃의 일부가 아님
클래스 메모리 레이아웃에 포함
exe 파일 안에 필요한 메모리가 잡혀 있음
> 컴파일러가 이 변수의 인스턴스가 몇 개 존재해야 하는지 알기에....
>> 오직 하나ㅎ
// Cat.h
class Cat
{
// ...
private:
static int mCount;
};
// Cat.cpp
int Cat::mCount = 0;
Cat::Cat()
{
mCount++;
}
정적 멤버 변수 베스트 프랙티스
함수 안에서 정적 변수를 넣지 말 것
> 클래스 안에 넣을 것
전역변수 대신 정적 멤버변수를 쓸 것
> 범위(Scope)를 제한하기 위해
C스타일의 정적 변수를 쓸 이유가 이제 없음
정적 멤버 함수
논리적인 범위(scope)에 제한 된 전역 함수
해당 클래스의 정적 멤버에만 접근 가능
개체가 없이도 정적 함수를 호출할 수 있음
> Math::Square(10);
출처 : 포큐아카데미 C++ 언매니지드 프로그래밍
'프로그래밍 > C++' 카테고리의 다른 글
STL 컨테이너 / 벡터(Vector) 1 (0) | 2020.06.22 |
---|---|
예외(Exception) (0) | 2020.06.18 |
인라인 함수(Inline Functions) (0) | 2020.06.17 |
캐스팅(형변환, Casting) (0) | 2020.06.16 |
추상 클래스 / 인터페이스 (0) | 2020.06.12 |