LANG/C++

[C++]04-4.클래스와 배열 그리고 포인터

혀니리리 2023. 5. 12. 17:40
728x90

1.객체 배열

 SoSimple * ptrArr = new SoSimple[10];

배열 선언 이후에 각각의 요소를 원하는 값으로 초기화시키길 원한다면 일일히 초기화의 과정을 거쳐야 함

#include <iostream>
#include <cstring>
using namespace std;

class Person
{
private:
    char *name;
    int age;
public:
    Person(char *myname, int myage)
    {
        int len = strlen(myname) + 1;
        name = new char[len];
        strcpy(name, myname);
        age = myage;
    }
    Person()
    {
        name = NULL;
        age = 0;
        cout << "called Person()" << endl;
    }
    void SetPersonInfo(char * myname, int myage)
    {
        name = myname;
        age = myage;
    }
    void ShowPersonInfo() const
    {
        cout << "이름:"  << name << ", ";
        cout << "나이: " << age << endl;
    }
    ~Person()
    {
        delete []name;
        cout << "called destructor!" << endl;
    }
};


int main(void)
{
    Person parr[3];
    char namestr[100];
    char *strptr;
    int age;
    int len;

    for (int i = 0; i < 3; i++)
    {
        cout <<"이름: ";
        cin>> namestr;
        cout << "나이: ";
        cin >> age;
        len = strlen(namestr) + 1;
        strptr = new char[len];
        strcpy(strptr, namestr);
        parr[i].SetPersonInfo(strptr, age);
    }
    parr[0].ShowPersonInfo();
    parr[1].ShowPersonInfo();
    parr[2].ShowPersonInfo();
    return 0;
}

 

2.객체 포인터 배열 : 객체의 주소 값 저장이 가능한 포인터 변수로 이뤄진 배열

#include <iostream>
#include <cstring>
using namespace std;

class Person
{
 //생략
}

int main(void)
{
	Person *parr[3];
    char namestr[100];
    int age;
    
    for(int i = 0; i < 3; i++)
    {
    	cout <<"이름: ";
        cin >> namestr;
        cout << "나이: ";
        cin >> age;
        parr[i] =new Person(namestr, age);
	}
    parr[0]->ShowPersonInfo();
    parr[1]->ShowPersonInfo();
    parr[2]->ShowPersonInfo();
    delete parr[0];
    delete parr[1];
    delete parr[2];
    return 0;
}

저장의 대상을 객체로 하느냐, 객체의 주소 값으로 하냐를 정해야 함.

 

this => 객체 자신을 가리키는 용도로 사용되는 포인터

그 주소값과 자료형이 정해져있지 않음

이렇게 매개변수의 이름과 멤버변수의 이름이 같을 때 구분 가능.

 

 

728x90