앞서 만든 Person 객체는 생성시 이름과 나이를 입력받았다.
Person 객체를 배열로 생성하게 되면 다음과 같은 형식이 될것이다
Person arr[10];
// 또는
Person* pArr = new Person[10];
이러한 형태로 선언하려면 이에 맞는 생성자가 있어야 한다.
Person 객체에 매개변수를 받지 않는 객체를 선언하고, 이름과 나이를 설정하는 함수를 만들어보자.
Person 클래스 추가 메서드
Person() : 매개변수를 받지 않는 생성자
setInfo(char* name, int age) : 이름과 나이를 전달받아 저장
Person.h
#ifndef __PERSON__
#define __PERSON__
class Person
{
char* name;
int age;
public:
Person(const char*, int);
Person(); // 매개변수가 없는 생성자 추가
~Person();
void showInfo() const;
void setInfo(char*, int); // 이름과 나이를 세팅하는 함수 추가
};
#endif
Person.cpp
#include <iostream>
#include "Person.h"
#include <cstring>
using namespace std;
Person::Person(const char* myname, int myage)
: age(myage)
{
int len = strlen(myname) + 1;
name = new char[len];
strcpy(name, myname);
}
Person::Person()
: age(0)
{
cout << "빈 객체 생성" << endl;
name = NULL;
}
Person::~Person()
{
cout << name << " 객체 소멸" << endl;
delete[] name;
}
void Person::showInfo() const {
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
}
void Person::setInfo(char* myname, int myage) {
name = myname;
age = myage;
}
객체 배열 사용 예제
main.cpp
#include <iostream>
using namespace std;
#include "Person.h"
#include <cstring>
int main() {
Person arr[3]; // Person 객체 배열
char name[100]; // 이름을 입력받기 위한 변수
int age; // 나이 입력
char *pName; // 동적할당하고 가리킬 포인터
int len; // 동적할당 길이정보
cout << "***** 정보 입력" << endl;
for (int i = 0; i < 3; i++) {
cout << "이름 : ";
cin >> name;
cout << "나이 : ";
cin >> age;
len = strlen(name) + 1;
pName = new char[len]; // 동적할당
strcpy(pName, name);
arr[i].setInfo(pName, age);
}
cout << endl << "***** 입력받은 배열 출력" << endl;
for (int i = 0; i < 3; i++) {
arr[i].showInfo();
}
return 0;
}
객체 포인터 배열 사용예제
Person 객체는 같고 main.cpp만 변경됩니다.
main.cpp
#include <iostream>
using namespace std;
#include "Person.h"
#include <cstring>
int main() {
Person* arr[3]; // Person객체 포인터 배열
char name[100];
int age;
cout << "***** 정보 입력" << endl;
for (int i = 0; i < 3; i++) {
cout << "이름 : ";
cin >> name;
cout << "나이 : ";
cin >> age;
arr[i] = new Person(name, age); // 동적할당
}
cout << endl << "***** 입력받은 배열 출력" << endl;
for (int i = 0; i < 3; i++) {
arr[i]->showInfo();
}
cout << endl << "***** 동적할당받은 객체 소멸" << endl;
for (int i = 0; i < 3; i++) {
delete arr[i];
}
return 0;
}