[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( )와 동일