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
'LANG > C++' 카테고리의 다른 글
[C++]05-2.'깊은 복사'와 '얕은 복사' (0) | 2023.05.13 |
---|---|
[C++]05-1.'복사생성자'와의 첫 만남 (0) | 2023.05.13 |
[C++] 04-3.생성자(Constructor)와 소멸자(Destructor) (0) | 2023.05.12 |
[C++]04-2.캡슐화(Encapsulation) (0) | 2023.05.12 |
[C++]04-1.정보은닉(Information Hiding) (2) | 2023.05.12 |