컴퓨터 언어/C++

[C++] C++ 20일차 static(정적) 멤버변수와 static(정적) 함수

훈츠 2020. 4. 24. 18:15
반응형

 

안녕하세요. 훈츠입니다. 금일은 클래스 안에 static(정적) 멤버 변수와 static(정적)함수에 관해 포스팅 합니다.

 

클래스 안에 정적 멤버 변수(static variable in the class)

 

  • 공용으로 사용 할수 있다. Ex) class A test1, test2 일때, test1 과 test2 는 class A에 있는 정적 멤버변수를 공유한다.
    • 클래스의 전역 변수 역활을 합니다.
  • 클래스 외부에서 한번은 초기화 해야 합니다.
  • 초기화 할때는 :: 을 이용하여 소속을 지정합니다.
  • 클래스의 인스턴스를 생성하지 않아도 정적 멤버변수를 사용할수 있다.

 

형식 ( static 데이터형 멤버변수명 )

  • 클래스안에 정적(static) 변수로 선언
    • Main 함수 밖에서 선언 해야 하며 형식은 다음과 같습니다.
    • Int A::m_nVar = 0;
  • A 클래스 안에 정적(static) 함수 선언
    • static void Set(int nVar { static A test(nVar);

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
class A
{
private
    static int m_nVar;
public:
    static int nVar;
    
    static void Print() {
        cout << "m_nVar : " << m_nVar << endl;
    }
    void print() {
        cout << "nVar : " << nVar << endl;
    }
};
 
// static 멤버 초기화 코드
int A::nVar = 10;
int A::m_nVar = 20;
 
int main()
{
    //A 클래스의 인스턴스 없이 사용
    A::Print(); //A 클래스 static 함수 
    cout << A::nVar << endl; //A 클래스 static 변수 
 
    //A 클래스의 인스턴스2개 생성후,공유하는기능 
    A test1, test2;
    test1.nVar = 30// test1에 nVar 값을 변경후
    test2.print(); // test2에 nVar 값을 출력, 30이 나오는것을 확인
 
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

tip's and trick

 

클래스내에 선언된 static 변수나 함수 역시, 기본적인 Static 특성을 가지고 있는것을 확인 할수 있습니다.

프로그램이 실행 될때, 한번 생성 되면서 초기화 되는 특성이 클래스내에 있다고 해도 똑같이 동작 하는것을  알수 있습니다. 

 

프로그램이 생성될때 정적변수는 반드시 초기화 해줘야 하며, 정적변수는 정정 함수에서만 다루는것이 추후 코드 관리에 좋다는것도 알았습니다.

 

잘 기억하고 이후 정적 변수와 정적함수를 클래스내에 사용할때 적용 하면 됩니다.

 

반응형