[c++] 객체 포인터, const, 객체와 함수
객체 포인터
- 정적 메모리 할당
- 동적 메모리 할당
Car myCar; // 정적 메모리 할당으로 객체 생성
Car *pCar = new Car(); // 동적 메모리 할당으로 객체 생성
객체 포인터를 사용한 멤버 접근
해당 연산자로 접근
pCar->speed = 100;
pCar->speedup( );
객체 포인터에 저장할 수 있는것
Car myCar;
Car *pCar = &myCar; // 객체 변수의 주소를 pCar에 할당
this 포인터
- 자신을 가리키는 개체 포인터
- 컴파일러에 의해 자동 생성
- 멤버 변수, 매개변수 이름이 같을때 구분을 위해 사용
const 수식자
변수 선언 앞에 붙여서 상수를 만드는 수식자
상수 멤버 변수
상수 멤버 함수
객체를 변경하지 않는 함수
void displaySpeed( ) const { cout << "자동차의 속도: " << speed < < endl; }멤버 변수 값을 변경이 불가능
멤버 함수안에서 상수화되지 않은 함수를 호출하면 오류발생
접근자를 상수 멤버 함수로 만드는것이 바람직하다.
상수 객체
- const를 객체에 붙이면 객체를 통해 멤버 변수 값을 변경할 수 없다.
- 멤버 함수 호출 x, 상수 멤버 함수만 가능
객체와 연산자
- 대입 연산자(=)
- 객체끼리 복사 가능
- 비교 연산자(==)
- 정의해야만 사용이 가능 *연산자 중복(operate overloading)을 사용해 연산자를 수동으로 정의해 사용이 가능하다.
객체와 함수
객체가 함수의 매개 변수로 전달되는 경우
- 객체의 원본이 아니라 새로운 객체로 복사되어 진행된다.
void swapObjects(Car c1, Car c2) { Car tmp; tmp = c1; c1 = c2; c2 = tmp; } int main() { Car red(0, 1, "red"); Car blue(30, 2, "blue"); swapObjects(red, blue); red.print(); blue.print(); return 0; }함수가 객체를 반환하는 경우
- 원본이 전달x, 내용이 복사된다.
객채의 포인터가 매개 변수로 전달되는 경우
void swapObjects(Car *p1, Car *p2) { Car tmp; tmp = *p1; *p1 = *p2; *p2 = tmp; } int main() { Car red(0, 1, "red"); Car blue(0, 1, "blue"); swapObjects(&red, &blue); red.print(); blue.print(); return 0; }객체의 참조자가 매개 변수로 전달되는 경우
void swapObjects(Car &r1, Car &r2) { Car tmp; tmp = r1; r1 = r2; r2 = tmp; } int main() { Car red(0, 1, "red"); Car blue(30, 2, "blue"); swapObjects(red, blue); red.print(); blue.print(); return 0; }