프로그래밍 언어/열혈 C++
04-4 클래스와 배열 그리고 this 포인터 by 윤성우의 열혈 C++
당장하자
2022. 3. 5. 20:02
객체배열
- 객체 기반 배열의 선언은 다음과 같이 한다.
class Simple
{
.
.
.
}
Simple arr[10];
- 이를 동적으로 할당하기 위해서 다음과 같이 선언한다.
Simple * ptrArr = new Simple[10];
이렇게 생성되더라도 생성자는 호출이 되는데 선언과정에서 따로 생성자를 명시하지 못한다.
따라서 다음과 같은 생성자가 반드시 포함되어야 한다.
Simple(){...}
예시)
class Person
{
private:
char *name;
int age;
public:
Person(char * myname, int myage)
{
int len = strlen(myname);
name = new char[len];
strcpy(name, myname);
age = myage;
}
Person()
{
name = NULL;
age = 0;
cout << "called Person()" << endl;
}
}
객체 포인터 배열
- 객체의 주소 값 저장이 가능한 포인터 변수로 이뤄진 배열이다.
class Person{};
int main()
{
Person * parr[3];
parr[1] = new Person();
parr[2] = new Person();
parr[3] = new Person();
parr[1]->ShowAge();
parr[2]->ShowPos();
}
this 포인터
- 멤버함수 내에서 this 라는 이름의 포인터를 사용할 수 있는데 이는 객체 자신을 가리키는 포인터이다.
- 변수이름을 같게 지을 수 있게 해준다.
class ThisClass
{
private:
int num;
public:
void ThisFunc(int num)
{
this->num = 207;
num = 111;
}
};
- 하나의 객체로 반환하는 참조 값을 가지고 멤버함수를 이어서 호출할 수 있다.
class SelfRef
{
private:
int num;
public:
SelfRef(int num):num(num){}
SelfRef& AddNum(int num)
{
this->num += num;
return *this;
}
SelfRef& ShowNum()
{
cout << num << endl;
return *this;
}
};
int main()
{
SelfRef obj(3);
obj.ShowNum().AddNum(7).ShowNum();
return 0;
}
// 출력
// 3
// 10