static Members

때때로는, 클래스의 객체들이 모두 공유하는 변수를 가지는 것이 용이하다. 전역변수와는 조금 다른 점이 있다

  • 공통점 : 특정 함수나 클래스가 끝나고 나서 변수가 사라지지 않는다.
  • 차이점 : 특정 클래스에 구속되어 있다.

이것을 구현하고 싶으면 Static 키워드를 붙여주면 된다.

특이한 점은, 이 변수를 사용하기 전에 초기화는, 클래스 내부에서 하지 않고, 전역변수처럼 main 함수 밖에서 한다.

#include <iostream>
 
using namespace std;
 
class Point{
private:
    int x;
    int y;
    // 선언!!
    static int numCreatedObjects;
    
public:
    // 초기화시 개수를 하나씩 늘려줌
    Point(): x(0), y(0){
        numCreatedObjects++;
    }
    Point(int _x, int _y): x(_x), y(_y) {
        numCreatedObjects++;
    }
    
    // public에서 이 숫자를 접근 할 수 있게 함수를 만들어줌.
    static int getNumCreatedObject(){ return numCreatedObjects; }
};
 
// 여기서 초기화를 해준다!
int Point::numCreatedObjects = 0;
 
 
int main(){
    Point pt1(1, 2);
    cout << pt1.getNumCreatedObject() << endl;
    
    Point pt2(3, 3);
    cout << pt1.getNumCreatedObject() << endl;
    cout << pt2.getNumCreatedObject() << endl;
    
    return 0;
}
1
2
2

pt1 과 pt2에 관련없이 생성된 객체의 개수만큼 반환되는 것을 알 수 있다.