본문 바로가기

Programming/C/C++

C++/객체 배열

반응형

객체 배열


객체 배열은 원소가 객체라는 점을 재외하고 선언과 그 활용이 일반 배열과 동일하다.

객체 배열은 반드시 기본 생성자를 호출하며,

클래스의 기본생성자 외 생성자를 생성시, 객체 배열을 사용해 해당 클래스로 객체를 생성했을 떄,

기본 생성자가 존재하지 않아 오류가 난다

* 반드시 기본 생성자를 삽입하여야 한다.


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


실행 결과

반응형