프로그래밍/C++

[C++] static member function

갓똥 2019. 11. 17. 20:41
728x90
반응형

1. 정적 멤버 함수 (static member function)

class Car {
    int speed;
    static int cnt;
public:
    Car()  { ++cnt; }
    ~Car() { --cnt; }
    
    int getCount() { return cnt; }
};
int Car::cnt = 0;

int main() {
    Car c1, c2, c3;
    
    c1.getCount();
}

 

static member data는 객체를 생성하지 않아도 메모리에 올라간다.
위의 코드에서는 getCount() 함수를 통해 객체의 개수를 파악하고 있다.
그런데, 객체를 생성하지 않은 상태에서 개수를 파악하고 싶을 때 getCount()를 어떻게 호출할까?
static int getCount() { return cnt; }

Car::getCount();

  정적 멤버 함수 (static member function)

    => 객체 없이 호출 가능한 멤버 함수

    => 클래스 이름::함수이름() 으로 호출


  ② 정적 멤버 함수를 호출하는 2가지 방법

    => 클래스 이름으로 호출

        -> Car::getCount();

    => 객체 이름으로 호출

        -> c1.getCount();

 

  ③ 객체 이름보다는 클래스 이름을 사용하는 것이 좋다.

 

  ④ Java, C# 등의 언어는 클래스 이름으로만 접근 가능하다.

 


2. 정적 멤버 함수의 특징

class Test {
    int        data1;
    static int data2;
public:
    static void t1() {
        data1 = 0; // error
        data2 = 0; // ok
        t2();      // error
    }
    void t2() {
        data1 = 0; // ok
        data2 = 0; // ok
        t1();      // ok
    }
};
int Test::data2 = 0;

int main() {
    Test::t1();
    
    Test t;
    t.t2();
}

  정적 멤버 함수 (static member function) 의 특징

    => 객체 없이 호출 가능한 멤버 함수

    => 일반 멤버(데이터, 함수)에 접근할 수 없다.

    => 정적 멤버(데이터, 함수)에 접근할 수 있다.

 

  ② 일반 멤버 함수 vs 정적 멤버 함수

728x90
반응형