객체 배열
Sosimple arr[10];
Sosimple *ptrArr = new Sosimple[10]; // 동적
- 열 개의 객체가 모여 배열 구성
- 배열의 선언과정에서는 호출할 생성자를 별도로 명시하지 못함
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;
class Person
{
private:
char* name;
int age;
public:
Person()
{
name = NULL;
age = 0;
cout << "called Person()" << endl;
}
void setinfo(char* myname, int myage)
{
name = myname;
age = myage;
}
void showinfo() const
{
cout << "이름 : " << name << ", ";
cout << "나이 : " << age << endl;
}
~Person()
{
delete[]name;
cout << "call destructor!" << endl;
}
};
int main(void)
{
Person parr[3]; // Person() 생성자 실행
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]; // 입력한 이름 + 1만큼 메모리 공간 할당
strcpy(strptr, namestr); // 할당한 메모리 공간으로 입력한 이름 복사
parr[i].setinfo(strptr, age); // 클래스에 정보 입력
}
parr[0].showinfo();
parr[1].showinfo();
parr[2].showinfo();
return 0; // 소멸자 실행
}
객체 포인터 배열
객체의 주소 값 저장이 가능한 포인터 변수로 이뤄진 배열
#define _CRT_SECURE_NO_WARNINGS
#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;
}
void setinfo(char* myname, int myage)
{
name = myname;
age = myage;
}
void showinfo() const
{
cout << "이름 : " << name << ", ";
cout << "나이 : " << age << endl;
}
~Person()
{
delete[]name;
cout << "call destructor!" << endl;
}
};
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] -> showinfo(); // 포인터로 구조체나 클래스 멤버에 접근할 때는 화살표 연산자 사용
parr[1] -> showinfo();
parr[2] -> showinfo();
delete parr[0];
delete parr[1];
delete parr[2];
return 0; // 소멸자 실행
}
배열에 일반 구조체가 있으면 점으로, 포인터가 있으면 화살표로 접근
this 포인터
- 객체 자신을 가리키는 용도로 사용되는 포인터
- this 포인터는 그 주소 값과 자료형이 정해져있지 않은 포인터
- this 포인터를 이용해 생성자의 매개변수를 멤버변수로 대입할 수 있다.
Self-Reference의 반환
객체 자신을 참조할 수 있는 참조자
SelfRef
'Language&Framework&Etc > C++' 카테고리의 다른 글
가상함수 (0) | 2021.01.12 |
---|---|
C++ 상속 예제 (0) | 2021.01.10 |
C/C++ 내용 정리 (0) | 2021.01.09 |
구조체 및 클래스 간단히 정리(C와 C++) (0) | 2021.01.09 |
클래스의 완성(04-3) 생성자(Constructor)와 소멸자(Destructor)-2 (0) | 2020.12.28 |