객체 배열
1. 객체 배열 선언 및 활용
C++에서 객체의 배열을 선언하는 방법을 알아보자. 객체 배열은 원소가 객체라는 점을 빼고, int, char 등 기본 타입의 배열을 선언하고 활용하는 방법과 동일하다. 다음 예제 코드를 보도록 하자.
i.e.
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle() { radius = 1; } //클래스 선언부에서 구현 -> 컴파일 시에 인라인 함수로 변환
Circle(int r) { radius = r; }
void setRadius(int r) { radius = r; }
double getArea();
};
double Circle::getArea() {
return 3.14 * radius * radius;
}
int main() {
Circle circleArray[3]; //Circle 객체 배열 생성
//배열의 각 원소 객체의 멤버 접근
circleArray[0].setRadius(10);
circleArray[1].setRadius(20);
circleArray[2].setRadius(30);
for (int i = 0; i< 3; i++) {
cout << "Circle " << i << "의 면적은 " << circleArray[i].getArea() << endl;
}
Circle *p; //Circle 객체 포인터 선언
p = circleArray; //포인터 p는 circleArray 배열을 가리키게 된다.
for (int i = 0; i < 3; i++) {
cout <<< "Circle " << i << "의 면적은 " << p->getArea() << endl;
p++; //포인터 산술 연산을 통해 객체 배열의 다음 원소로 이동
}
}
- 객체 배열 선언문은 반드시 기본 생성자를 호출한다.
객체 배열 선언문은 오직 매개 변수 없는 기본 생성자를 호출한다.
- 객체 배열 사용
배열의 각 원소 객체는 [] 연산자로 구분한다.
- 배열 소멸과 소멸자
함수가 종료하면 함수 내에 선언된 배열도 소멸된다. 배열이 소멸되면, 모든 원소 객체가 소멸되며 각 원소 객체마다 소멸자가 호출된다.
위의 예제에서 main() 함수가 종료되면 circleArray 배열이 소멸되며, 높은 인덱스에서부터 원소 객체가 소멸되고, 각 객체마다 ~Circle() 소멸자가 실행된다.
2. 객체 배열 초기화
객체 배열을 생성할 때 생성자를 사용하여 다음과 같은 방법으로 원소 객체의 초기화를 할 수 있다.
i.e.
Circle circleArray[3] = { Circle(10), Circle(20), Circle() };
배열을 선언할 때 { } 안에 호출할 생성자를 지정한다. 위의 예제 코드에 의해 circleArray[0], circleArray[1], circleArray[2]가 생성될 때, 생성자 Circle(10), Circle(20), Circle()이 각각 호출된다. 여기서, Circle(10)과 Circle(20)은 Circle(int r) 생성자를 호출하고, Circle()은 기본 생성자의 호출을 지시한다.
'C++ > C++ 기본' 카테고리의 다른 글
동적 메모리 할당 및 반환 (0) | 2018.07.16 |
---|---|
다차원 객체 배열 (0) | 2018.07.07 |
객체 포인터 (2) | 2018.07.07 |
바람직한 C++ 프로그램 작성법 (2) | 2018.07.07 |
C++ 구조체 (2) | 2018.07.07 |