동일한 클래스에 속하는 객체를 여러 개 생성하기 위해서 객체로 이루어진 배열을 생성할 수 있다.
이를 객체 배열이라고 하는데, 이 chater에서는 객체 배열과 객체 포인터인 this에 대해 알아보도록 하겠다.
1. 객체 배열
객체 배열은 표준 데이터형에서 배열을 선언하는 것과 동일한 방법을 사용한다.
Date Mday[3]; //3개의 Date 객체로 이루어진 배열 생성
위와 같이 명시적으로 초기화 되지 않은 클래스 객체들을 생성할 때,
프로그램은 항상 디폴트 클래스 생성자를 호출한다는 것을 떠올린다.
아래와 같이 생성자를 사용하여 배열 원소들을 초기화 할 수 잇따.
이 경우에는 각각의 원소에 대해 생성자를 호출해야 한다.
Date Mday[3]={
Date("내 생일",2000,1,22),
Date("니 생일",2009,12,11),
Date("기념일",2020,5,14)
};
객체 배열을 초기화하는 표준 형식은 배열의 값들을 콤마로 서로 분리하고 전체를 중괄호로 묶어준다.
생성자 함수에 대한 각각의 호출이 배열의 값이 되는 것이다.
클래스가 생성자를 하나 이상 가지고 있을 때에는 배열의 각 원소마다 서로 다른 생성자를 사용할 수도 있다.
앞에서 설명한 예제를 가지고 객체 배열이 어떻게 구현되는지 실습해보자.
실습 예제 5-1 :
Date.h
//date.h
class Date {
private:
int year, month, day;
char* dName;
public:
Date(const char* sName, int sy, int sm, int sd);//생성자
void ShowDate();
~Date();//소멸자
};
Date.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include "Date.h"
Date::Date(const char* sName, int sy, int sm, int sd) {//생성자
std::cout << "생성자 호출!!\n";
dName = new char[std::strlen(sName) + 1];
std::strcpy(dName, sName);
year = sy;
month = sm;
day = sd;
}
Date::~Date() {
std::cout << "소멸자 호출!!\n";
delete[] dName;
}
void Date::ShowDate() {
std::cout << dName << "은 " << year << "년 "
<< month << "월 " << day << "일 입니다.\n";
}
main.cpp
#include <iostream>
#include "Date.h"
int main(void) {
Date Mday[3] = {
Date("내 생일", 2000,1,22),
Date("니 생일", 2009, 12, 11),
Date("기념일",2020,5,14)
};
Mday[0].ShowDate();
Mday[1].ShowDate();
Mday[2].ShowDate();
return 0;
}
'c++' 카테고리의 다른 글
22. [C++] friend (0) | 2023.01.20 |
---|---|
[C++] 2가지 call by reference(주솟값, 참조자 이용) (0) | 2023.01.20 |
19. [C++] 생성자와 소멸자 (0) | 2023.01.20 |
11. [C++] 동적 메모리 할당과 해제, 변수 동적 할당, 동적 배열 / 2차원 배열 동적 할당 (0) | 2023.01.15 |
1-3 [C++] 실수 표준출력 (0) | 2023.01.15 |