본문 바로가기

프로그래밍 언어/열혈 C++

04-4 클래스와 배열 그리고 this 포인터 by 윤성우의 열혈 C++

객체배열

  • 객체 기반 배열의 선언은 다음과 같이 한다.
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