Minwoo Dev.

[C++] 객체 배열, 객체 포인터 배열 본문

C++

[C++] 객체 배열, 객체 포인터 배열

itisminu 2024. 3. 25. 09:59
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