오늘은 static member 에대해서 배워볼려한다.
static 은 뭐 변하지않는느낌으로 변수가 변하지않는느낌이였는데 그게 아니라 모든 Object가 가지고있는 변수가 해당 Class에서 가져와 global variable 느낌이난다. 즉' a object에서 x 값이 변하면 그대로 b object에서의 x도 똑같이 변하는것.
<특징>
1. 한개의 copy of memer가 생성이되고 이 한개의 카피를 모든 오브젝트들이 공유한다.
2. static data member 는 initialization 할때 모든 오브젝트들보다 먼저 선언되브로 클래스 밖에다 먼저 써줘야한다.
3. 클래스안에서만 보이며 lifetime은 영구적이다.
4. static member 혹은 function이 쓰였을때는 this 를 쓸 수 없다. (this는 각각의 object들의 주소를 가르치는건데 개념이 반대다)

This pointer 의 구조를 좀 수정해서 설명하면 int x 는 각각의 오브젝트들에 카피되었다면 static은 하나밖에없어서 모든 오브젝트의 y가 하나의 카피된 y에 접근하게된다.
Good example
#include <iostream>
using namespace std;
class Base{
public:
int x;
static int y;
void printX(){cout << x << endl;}
static void printY(){cout << y << endl;}
};
int Base::y; // 여기서 미리 이니셜이 되어야한다.
int main() {
Base b1;
b1.x = 10;
Base::y =30; // static y를 콜할때 굳이 object이름 필요 x
Base b2;
b2.x =20;
Base::y =40;
b1.printX();
Base::printY();
b2.printX();
Base::printY();
return 0;
}
Output
10
40
20
40'Language > C++' 카테고리의 다른 글
| [c++][pointer vs reference 정복 2] Pass by value vs Pass by reference (0) | 2022.11.18 |
|---|---|
| [c++][pointer, reference 정복 1] Memory Layout in C (0) | 2022.11.16 |
| [Geeks][Reference] References in C++ (0) | 2022.11.15 |
| [c++] <this> pointer 오호... (0) | 2022.10.11 |
| [C] pointer 대체 너는 왜이리 높은 산이냐... (0) | 2022.10.07 |
댓글