관리 메뉴
Automotive Software
정적 멤버 변수 및 함수 (Static Member and Function) 본문
프로그래밍 (Programming)/C++ (C Plus Plus) 기초
정적 멤버 변수 및 함수 (Static Member and Function)
AutoSW 2021. 1. 11. 23:44- 일반적인 멤버 변수는 비정적인(Non-static) 변수로 선언되어 클래스의 객체 생성 시 메모리를 할당받아 생성됨
- 객체가 생성되지 않으면 메모리내에 상주하지 않아 비정적인 멤버 변수는 접근 불가
- 접근 범위가 객체내부에 한정되므로 외부에서 선언이 불필요함
- 인스턴스(객체) 멤버 : 객체별 독립된 메모리 할당
- 객체가 생성되지 않으면 메모리내에 상주하지 않아 비정적인 멤버 변수는 접근 불가
- 정적(Static) 멤버 변수는 전역 변수와 같이 프로그램 실행 시 메모리를 할당받아 생성됨
- 객체가 생성되지 않더라도 이미 메모리에 상주하므로 정적인 멤버 변수는 접근 가능
- 일반적인 전역 변수와 같이 클래스 외부에서 직접적인 선언이 있어야 함
- 클래스 멤버 : 동일 클래스의 모든 객체(인스턴스)에서 공유
- 객체가 생성되지 않더라도 이미 메모리에 상주하므로 정적인 멤버 변수는 접근 가능
- 접근
- 클래스 객채를 통한
- 멤버 접근 방식은 일반적인 멤버 접근과 동일
- 클래스 객체를 통하지 않은
- 멤버 변수 및 함수 접근 방식은 클래스명과 범위지정 연산자를 명시적으로 사용하여 가능
- 정적 멤버 함수 -----> 비정적 멤버 변수(함수)로의 접근 : 불허용
- 정적 멤버 함수 -----> this 포인터 접근 : 불허용
- 객체의 메모리 할당 여부 불투명
- this 포인터를 가지지 않으므로 const로 선언될 수 없음
- 비정적 멤버 함수 --> 정적 멤버 변수(함수)로의 접근 : 허용 (정적 변수는 이미 메모리 할당)
- 클래스 객채를 통한
- 주요 적용 예
- 동일한 클래스를 가지는 객체 간 특정 공유 변수를 가지고자 할 때
- 전역 변수 또는 함수를 특정 클래스에 캡슐화하고자 할 때
- 생성 객체의 개수를 나타내고자 할 때 (생성자 증가, 소멸자 감소)
class cMyClass
{
public:
cMyClass(){ numOfInstances++; }
~cMyClass(){ numOfInstances--; }
static int numOfInstances; // 정적 멤버변수 선언
};
int cMyClass::numOfInstances = 0; // 정적 멤버변수 정의
int main()
{
...
int howMany = cMyClass::numOfInstances; // 객체를 통하지 않은 정적 멤버변수 접근
return 0;
}
- 전용 정적 멤버 변수 및 접근 함수
- 범용 정적 멤버 변수는 전용(private) 또는 보호(protected)로 선언 후 접근 함수를 구현함으로써 접근을 제한 할 수 있음
class cMyClass
{
public:
cMyClass(){ numOfInstances++; }
~cMyClass(){ numOfInstances--; }
int getInstance(){ return numOfInstances; }
private:
static int numOfInstances; // 정적 멤버변수 선언
};
int cMyClass::numOfInstances = 0; // 정적 멤버변수 정의
int main()
{
...
cMyClass myClass;
int howMany = myClass.getInstance(); // 객체를 통한 정적 멤버변수 접근
return 0;
}
'프로그래밍 (Programming) > C++ (C Plus Plus) 기초' 카테고리의 다른 글
함수 포인터 (Function Pointer) (0) | 2021.01.13 |
---|---|
다형성 (Polymorphism) (0) | 2021.01.07 |
상속 (Inheritance) (0) | 2021.01.02 |
연산자 중첩 (0) | 2020.12.29 |
객체 초기화 (0) | 2020.12.29 |