[C++ 문법] '정적(static) 멤버'
C언어에서는 프로그램 내에서 공유하는 변수나 함수를 만들기 위해 '전역'으로 선언 및 정의합니다. 하지만, C++에서 '전역'은 그다지 좋은 선택이 아닙니다. 객체지향 프로그래밍에서 어떤 클래스의 소속 없이 독립적으로 존재하는 '전역변수'나 '전역함수'는 설계상으로도 좋지않고, 불필요한 의존관계를 만들 수도 있습니다. 어떤 클래스의 소속에 있으면서 '전역'처럼 사용할 수 있도록 만들어진것이 바로 '정적(static) 멤버'입니다. 쉽게 말해, '전역변수'나 '전역함수'가 클래스 내에 들어옴으로써 최소한의 '소속'을 가지도록 했다는게 핵심입니다.
다음 예제는 일반적인 사용 예입니다.
class MyData {
private:
int m_nData;
static int m_nCount; // 정적 멤버변수 선언.(정적 멤버변수는 선언과 정의가 분리되어 있어야 합니다.)
public:
MyData(int nParam) : m_nData{ nParam } { m_nCount++; }
~MyData() { /* do somthing */ }
int GetData() const { return m_nData; }
void ResetCount() { m_nCount = 0; }
static int GetCount() const { return m_nCount; }
}
int MyData::m_nCount = 0; // 정적 멤버변수 정의.(정적 멤버변수는 선언과 정의가 분리되어 있어야 합니다.)
void main() {
MyData myData{ 10 };
cout << myData.GetCount() << endl; // 인스턴스를 통해 '정적 멤버함수'를 호출합니다.
cout << MyData::GetCount() < < endl; // 클래스를 통해 '정적 멤버함수'를 호출합니다.
}
'Programming > C C++' 카테고리의 다른 글
[C++ 문법] '변환 생성자' (0) | 2019.05.21 |
---|---|
[C++ 문법] '복사 생성자' (0) | 2019.05.20 |
[C++ 문법] 'mutable' 예약어와 'const_cast<>' 형변환 연산자 (0) | 2019.05.20 |
[C] 'inline 함수' (0) | 2019.05.19 |
[C++ 문법] '디폴트 매개변수' (0) | 2019.05.19 |
댓글
이 글 공유하기
다른 글
-
[C++ 문법] '변환 생성자'
[C++ 문법] '변환 생성자'
2019.05.21 -
[C++ 문법] '복사 생성자'
[C++ 문법] '복사 생성자'
2019.05.20 -
[C++ 문법] 'mutable' 예약어와 'const_cast<>' 형변환 연산자
[C++ 문법] 'mutable' 예약어와 'const_cast<>' 형변환 연산자
2019.05.20 -
[C] 'inline 함수'
[C] 'inline 함수'
2019.05.19