본문 바로가기
Language/C++

[oop in C++] Static members

by 담백로봇 2022. 10. 12.

오늘은 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들의 주소를 가르치는건데 개념이 반대다)

 

memory diagram

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

댓글