반응형
객체 배열
객체 배열은 원소가 객체라는 점을 재외하고 선언과 그 활용이 일반 배열과 동일하다.
객체 배열은 반드시 기본 생성자를 호출하며,
클래스의 기본생성자 외 생성자를 생성시, 객체 배열을 사용해 해당 클래스로 객체를 생성했을 떄,
기본 생성자가 존재하지 않아 오류가 난다
* 반드시 기본 생성자를 삽입하여야 한다.
Circle 클래스의 객체 배열 선언 및 활용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <iostream> using namespace std; class Circle { private: 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]; int i = 0; for (i = 0; i < 3; i++) { circleArray[i].setRadius((i + 1) * 10); } for (i = 0; i < 3; i++) { cout << "Circle " << i << "의 면적은 " << circleArray[i].getArea() << " 이다." << endl; } Circle *p; p = circleArray; for (i = 0; i < 3; i++) { cout << "Circle " << i << " 의 면적은" << p->getArea() << endl; p++; } return 0; } | cs |
실행 결과
배열의 소멸과 소멸자
함수가 종료하면 함수 내에 선언된 배열을 소멸한다.
배열이 소멸되면 모든 객체가 소멸되며 각 원소 객체마다 소멸자가 호출된다.
즉 main() 함수가 종료하면 circleArray()배열이 소멸되고, 높은 인덱스부터 원소 객체가 소멸되고 각 객체가 소멸될 때 ~Circle() 소멸자가 실행 된다.
객체 배열 초기화 방법
1 2 | //생성자를 사용하여 초기화 Circle circleArray[3] = { Circle(10), Circle(20), Circle() }; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <iostream> using namespace std; class Circle { private: int radius; public: Circle() { radius = 1; } Circle(int r) { radius = r; } void setArea(int r) { radius = r; } double getArea(); }; double Circle::getArea() { return 3.14*radius*radius; } int main() { Circle circleArray[3] = { Circle(10), Circle(20), Circle() }; for (int i = 0; i < 3; i++) { cout << "Circle " << i << "의 면적은 " << circleArray[i].getArea() << endl; } } | cs |
실행 결과
다차원 객체 배열
다차원 객체 배열은 2차원, 3차원 등의 객체 배열을 말하며 아래 예시는 2행 3열의 2차원 객체 배열이다.
1 | Circle circles[2][3]; | cs |
Circcle 클래스의 2차원배열 선언 및 활용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <iostream> using namespace std; class Circle { private: 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 circles[2][3]; int i, j,p; i = j = p = 0; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { circles[i][j].setRadius(p + 1); p++; cout << " Circle [" << i << "][" << j << "]의 면적은"; cout << circles[i][j].getArea() << endl; } } return 0; } | cs |
실행 결과
반응형
'Programming > C/C++' 카테고리의 다른 글
C++/동적 메모리 할당 및 반환 (0) | 2017.10.26 |
---|---|
C++/CPPRESTSDK_VisualStudio에 설치 및 라이브러리 관리 (0) | 2017.10.25 |
C++/객체 포인터 (0) | 2017.10.23 |
C++/헤더 파일과 cpp 파일로 분리 예시 (0) | 2017.10.23 |
C++/C++ 프로그램 작성법 (0) | 2017.10.23 |