C++ 5주차 객체 포인터와 배열
C++ 5주차 객체 포인터와 배열
객체 배열
선언 방법
클래스명 객체명[크기];
예시) Circle pizza[10];
사용 목적
- 여러 객체를 하나의 이름으로 관리
생성자와 소멸자
- 각각의 인자마다 생성자와 소멸자가 호출됨
- 기본 생성자만 호출됨
- 소멸자는 생성 된 순서의 반대로 소멸 됨
호출 순서 예시 코드)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
class ArrayCircleClass{ private: int radius; public: ArrayCircleClass() { radius = 1; } ArrayCircleClass(int r) { radius = r; } float GetArea(); ~ArrayCircleClass() { cout << radius << " 크기의 원 제거됨." << endl; } }; float ArrayCircleClass::GetArea() { return 3.14 * radius * radius; } int main() { ArrayCircleClass arrayCircle[3] = { ArrayCircleClass(), ArrayCircleClass(5), ArrayCircleClass(10)}; for(int i=0; i< 3; i++) cout << " " << arrayCircle[i].GetArea() << endl; }
결과
1 2 3 4 5 6
3.14 78.5 314 10 크기의 원 제거됨. 5 크기의 원 제거됨. 1 크기의 원 제거됨.
예시 코드에서 생성자는 arrayCircle[0], arrayCircle[1], arrayCircle[2] 순서대로 호출됨
소멸자는 생성자와 반대로 arrayCircle[2], arrayCircle[1], arrayCircle[0] 순서대로 호출됨
초기화
- 객체 배열의 생성자 지정 및 초기화
예시)
1
Circle circleArray[3] = [Circle(), Circle(10), Circle(20)];
이 예시에서 circleArray[0]인 Circle()은 기본 생성자를 호출한다.
circleArray[1], circleArray[2]는 매개 변수 전달 생성자를 호출하며, 각각 Circle(10), Circle(20)을 호출함
다차원 배열
선언 방법
클래스명 배열[크기 1][크기 2]
초기화
예시
멤버 접근 방법
객체명 [값1] [값2].메소드명;
예시
1
2
3
4
5
6
7
8
9
10
11
CircleMultiArray donutArray[2][3];
donutArray[0][0].setRadius(1);
donutArray[0][1].setRadius(2);
donutArray[0][2].setRadius(3);
donutArray[1][0].setRadius(4);
donutArray[1][1].setRadius(5);
donutArray[1][2].setRadius(6);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
cout << "Donut[" << i << "," << j << "]의 면적은 " << donutArray[i][j].getArea() << endl;
결과
1
2
3
4
5
6
Donut[0,0]의 면적은 3.14
Donut[0,1]의 면적은 12.56
Donut[0,2]의 면적은 28.26
Donut[1,0]의 면적은 50.24
Donut[1,1]의 면적은 78.5
Donut[1,2]의 면적은 113.04
동적 메모리
동적 메모리, 정적 메모리의 차이
동적 메모리:
- 프로그램 작성 시, 고정된 크기의 메모리를 사용함
정적 메모리:
- 실행 중에 필요한 메모리를 할당함(Heap 메모리)
동적 메모리 사용 방법
할당: new
반환: delete
형식
- 데이터 타입 *포인터변수 = new 데이터타입;
- 배열의 경우 new 데이터타입[크기];으로 해야함
- delete 포인터변수;
- 배열의 경우 delete[] 포인터변수명;으로 해야함
- 데이터 타입 *포인터변수 = new 데이터타입;
예시)
1
2
3
4
5
int pIntVar = new int; //int 타입의 메모리를 동적 할당
Circle *pCircleVar = new Circle; //CIrcle 클래스 타입의 메모리를 동적 할당
delete pIntVar; //할당 된 정수 공간을 반환
delete pCircleVar; //할당 된 객체 공간을 반환
자기 참조 포인터
this
자기 자신을 가르키는 포인터로 멤버 함수 내에서만 사용됨
예시)
1
Circle::Circle(int radius) { this->radius = radius; }
다른 객체의 this와 공유되지 않음
매개변수와 멤버 변수 이름이 동일할때 사용됨
자기 객체 주소 리턴에 사용
static 멤버 함수에서는 사용이 불가능함
컴파일러에 의한 코드 변환
컴파일 전
1
2
3
4
5
6
7
class Circle{
int radius;
public:
Circle(int radius) {
this->radius = radius;
}
};
컴파일 후
1
2
3
4
5
6
7
class Circle{
int radius;
public:
Circle(Circle* this, int radius){
this->radius = radius;
}
};
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

