C++ static 멤버

jaeha_lee·2022년 5월 10일
0

객체 생성 개수 구하기

  • 멤버 데이터는 객체당 한 개가 생성

  • Case 1 - 전역 변수 이용하는 방법 / 어디서든 접근 가능하기 때문에 안전하지 않음

  • Case 2 - static을 사용하는 방법 / 반드시 클래스 외부에서 선언 되어야함

    • static 멤버 데이터 특징
      • 프로그램 시작시 메모리에 올라감.
      • 객체 생성시 static 멤버 데이터는 객체의 메모리에 포함되지 않음
      • = 접근 지정자를 사용할 수 있는 전역변수
      • Static 멤버 데이터는 [ 클래스이름::static멤버이름 ]
      • 객체 이름으로도 접근 가능하고 클래스 이름으로도 접근 가능하지만, 클래스 이름으로만 접근하길 추천.
      • 여러개의 파일을 토앻 구현할 경우 static 멤버 변수의 외부 선언은 .cpp 파일에 작성
      • inline을 쓰면 내부에서 초기화 가능
        class Car{
            static int a = 0; // error
            inline static int b = 0; // ok
        }
    class Car{
        int speed{0};
    public:
        static int count;
        Car(){count++;}
        ~Car(){--count;}
    };
    int Car::count{0}; // 모든 Car 객체가 Car::count를 공유함
    • statoc 멤버 데이터는 객체가 없어도 메모리에 생성
    • 즉, 멤버 함수는 객체 없이 호출 가능
    class Test{
    	int a;
      static int b;
    public:
    	void func1(){
      	a = 1;			#1
          b = 2;			#2
          func2();		#3
      }
      static void func2(){
      	a = 1;			#4
          b = 2;			#5
          func1();		#6
      }
    }
    int Test::b{0};
    
    int main(){
    	Test::func2(); // #4 #6 error. 객체로 선언 안되어있음
     	Test t;
      t.func1() ; // 에러 안생김
    }
  • 파일 분리해서 개발 시 static은 함수 선언부에만 표기

0개의 댓글