객체 포인터와 객체 배열, 객체의 동적 생성
Circle donut;
double area = donut.getArea();
Circle *p;
p = &donut; // 객체에 대한 포인터 선언
area = p->getArea(); // 멤버 함수 호출
area = (*p).getArea(); // 멤버 함수 호출
Circle circleArray[3]; // Circle 객체 배열 생성
Circle circleArray[3](5); // 오류 (매개변수 있는 생성자 호출 불가)
circleArray[0].setRadius(10); // 객체 배열의 원소 객체 멤버 접근
Circle *p = circleArray; // p == circleArray[0]
p++; // p == circleArray[1]
// 각 원소별로 생성자 지정 가능
Circle circleArray[3] = { Circle(10), Circle(20), Circle() }
char *pChar = new char; // char 타입의 메모리 동적 할당
int *pInt = new int(20); // int 타입의 메모리 동적 할당, 20으로 초기화
Circle *pCircle = new Circle(); // Circle 클래스 타입의 메모리 동적 할당
Circle *pCircle = new Circle(20); // 매개변수가 있는 생성자 호출
delete pChar; // 할당 받은 문자 공간 반환
delete pInt; // 할당 받은 정수 공간 반환
delete pCircle; // 할당 받은 객체 공간 반환
int *p = new int[n]; // n개의 정수 배열 동적 할당
int *pp = new int[n](20); // 오류. 배열은 동적 할당 시 초기화 불가능
Circle *pArray = new Circle[n]; // 각 원소 객체의 기본 생성자 Circle() 실행
p[0] = 5; // 동적 할당된 배열 원소에 접근
delete [] p; // 배열 메모리 반환
delete pp;// []를 생략해도 오류는 아니지만 비정상적인 반환
delete [] pArray; // 각 원소 객체의 소멸자 ~Circle() 실행
class Circle{
int radius;
public:
Circle() { this->radius = 1; } // 컴파일러에 의해 삽입
Circle(int radius) { this->radius = radius; }
Circle* testFunc() { return this; } // 객체가 자신의 주소를 반환
...
}
// 컴파일러에 의해 묵시적으로 this 매개변수 삽입
Circle(Circle* this) { this->radius = 1; }
...
Circle donut;
donut.setRadius(&donut, 10); // 컴파일러에 의해 자신의 주소를 매개변수로 전달