미누에요
[C++] 객체 배열, 객체 포인터 배열 본문
728x90
반응형
SMALL
객체 포인터 배열
클래스를 이용하여 객체를 생성할 때, 배열의 형태로도 생성할 수 있다.
MyClass myclass[4]; // MyClass라는 클래스로 생성한 객체 배열 myclass
위처럼 MyClass 클래스를 이용하여 myclass라는 객체를 배열의 형태로 생성할 수 있다.
예제 코드를 보자.
#include <iostream>
#include <cstring>
using namespace std;
class MyFamily
{
private:
char *name;
int age;
public:
MyFamily(char *_name, int _age) // 생성자
{
name = _name;
age = _age;
}
MyFamily() // 생성자
{
name = NULL;
age = 0;
}
void ShowInfo()
{
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
}
void SetInfo(char *_name, int _age)
{
name = _name;
age = _age;
}
~MyFamily() // 소멸자
{
delete[] name;
}
};
int main(void)
{
MyFamily myfa[3]; // 객체 배열 생성!!
char namestr[100];
int age;
char *strptr;
for (int i = 0; i < sizeof(myfa) / sizeof(MyFamily); i++)
{
cout << "이름 입력 : ";
cin >> namestr;
cout << "나이 입력 : ";
cin >> age;
int len = strlen(namestr) + 1;
strptr = new char[len];
strcpy(strptr, namestr);
myfa[i].SetInfo(strptr, age);
}
cout << "-----------------------" << endl;
for (int i = 0; i < sizeof(myfa) / sizeof(MyFamily); i++)
{
myfa[i].ShowInfo();
}
return 0;
}
코드가 길지만 main 함수 안쪽을 보자.
MyFamily myfa[3] 라고 작성된 부분이 보이는가 ?
이 부분이 객체 배열을 생성한 부분이다.
이처럼 객체 여러개를 배열로 묶어서 사용할 수 있고, 일반적인 배열처럼 데이터에 접근이 가능하다.
객체 포인터 배열
객체 포인터 배열은 여러 개의 객체 주소값을 배열로 저장할 수 있는 방법이다.
#include <iostream>
#include <cstring>
using namespace std;
class MyFamily
{
private:
char *name;
int age;
public:
MyFamily(char *_name, int _age)
{
name = _name;
age = _age;
}
MyFamily()
{
name = NULL;
age = 0;
}
void ShowInfo()
{
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
}
void SetInfo(char *_name, int _age)
{
name = _name;
age = _age;
}
~MyFamily()
{
delete[] name;
}
};
int main(void)
{
MyFamily *pmyfa[3]; // 객체 포인터 배열 생성!
char namestr[100];
int age;
char *strptr;
for (int i = 0; i < 3; i++)
{
cout << "이름 입력 : ";
cin >> namestr;
cout << "나이 입력 : ";
cin >> age;
pmyfa[i] = new MyFamily(namestr, age);
}
cout << "-----------------------" << endl;
for (int i = 0; i < 3; i++)
{
pmyfa[i]->ShowInfo();
}
delete pmyfa[0];
delete pmyfa[1];
delete pmyfa[2];
return 0;
}
위 코드에서도 길지만 main 함수를 보자.
MyFailmy * pmyfa[3] 라는 코드로 객체 포인터 배열을 생성하고 있다.
일반적인 포인터 변수를 사용하듯이 객체 포인터 변수도 사용하면 된다.
조금 다른 점이라면, 포인터를 사용하여 참조한 객체는 "." 이 아니라 "->" 를 사용하여 멤버함수에 접근한다는 점이다!
728x90
반응형
LIST
'C++' 카테고리의 다른 글
[C++] 윤성우의 열혈 C++ 프로그래밍 ch 07-1 : 상속과 생성자의 호출 문제풀이 (0) | 2024.04.14 |
---|---|
[C++] this 포인터 (0) | 2024.03.25 |
[C++] 소멸자(Destructor) (0) | 2024.03.24 |
[C++] 디폴트 생성자(Default Constructor) (1) | 2024.03.17 |
[C++] 생성자(Constructor) (0) | 2024.03.17 |