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
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++] this 포인터 (0) | 2019.11.24 |
---|---|
[C++] const member function (0) | 2019.11.17 |
[C++] static member data (0) | 2019.11.14 |
[C++] 객체의 복사 방법 (0) | 2019.11.13 |
[C++] 복사 생성자 (copy constructor) (0) | 2019.11.07 |