[c++] 임시 객체, static, 객체 배열

임시 객체(temporary object)

  • 수식의 계산 도중에 중간 결과를 저장하기 위하여 임시적으로 만들어지는 객체

    const char* p = (s1+s2).c_str();  //문자열 임시객체가 생성
    cout << p;  //p가 가지고 있는 주소는 유효하지 않다.
    
  • 명시적으로 임시 객체 생성하기

    • 생성자를 명시적으로 호출
      Car ( 0, 1, "gray" );
      
    • 임시 객체 생성 : 참조자에 의해 참조
      Car &r = Car ( 0, 1, "gray" );
      
      참조자가 존재하는 동안 임시객체 또한 생존
    • 객체 변수에 복사
      Car c = Car ( 0, 1, "gray" );
      

정적 멤버 변수

  • 클래스에 의해 객체가 만들어진 개수를 계산
    • ex) 생성자안에 카운터 변수를 증가
  • 모든 객체가 하나의 변수를 공유

정적 멤버 함수

  • static 수식자를 멤버 함수 선언에 붙인다.
  • 클래스 모든 객체들이 공유
  • 클래스 이름을 통해 호출
    Car::getCount();
    
  • 객체가 생성되지 않은 상태에서 호출되는 멤버함수
    • 일반 변수들은 사용할 수 없다.
    • 정적 변수와 지역 변수만 사용 가능
    • 함수 내에서 일반 멤버 함수를 호출할 수 없다.

정적 상수

  • 각각의 객체에 존재하지 않고 , 하나만 존재

일반 상수와 차이점

  • 일반 상수는 멤버 초기화 목록으로 초기화
  • 정적 상수는 선언과 동시에 초기화 가능 (단 int)
    class Car {
        ...
        public:
        const static int MAX_PASSENGER = 5;
        const static int MAX_SPEED = 300;
        ...
        };
    
  • 실수일 경우, 클래스 외부에서 초기화

객체 배열

Car objArray[3]; // 선언

objArray[0].speed = 0; // 멤버 변수 접근
objArray[0].speedup( ); // 멤버 함수 호출

Car objArray[3] = {
	Car(0, 1, "white"),
	Car(0, 1, "red"),
	Car(0, 1, "blue"),
};  // 객체 배열 초기화

그리고 포인터

objArray->print( ); // objArray[0].print( )와 동일
(objArray + 1)->print( ); // objArray[1].print( )와 동일