1 minute read

4-1. 클래스와 배열

✏️객체배열

  • 객체도 배열로 선언할 수 있다.
  • 배열 선언의 경우 생성자가 호출되지만, 생성자에 인자를 전달하지 못한다.
  • 따라서 배열 선언 후 초기화를 원한다면 일일이 해야한다.
class Person{
    private:
        char* name;
        int age;
    public:
        Person(char* myname, int myage){        //구조체
            int len = strlen(myname)+1;
            name = new char[len];
            age = myage;
        }
        Person(){       //생성자
            name = NULL;
            age = 0;
            cout<<"Called Person()";
        }
}

//배열 선언
Person person[10];
Person * ptrPerson = new Person[10];        //동적할당

✏️객체 포인터 배열

  • 객체의 주소 값 저장이 가능한 포인터 변수로 이뤄진 배열
  • 위 예제와 다르게 포인터 배열이므로 new를 사용하여 객체를 만들고 주소를 배열에 저장한다.
  • new로 만들어준 객체 개수만큼 delete로 해방 시켜줘야 한다.

4-2. this 포인터

  • 객체 자기 자신을 가리키는 용도의 포인터
  • 예시
class SoSimple{
    private:
        int num;
    public:
        SoSimple(int n) : num(n){
            cout << "num = " << num << ", ";
            cout << "addtress = " << this << endl;
        }
        void ShowSimpleData(){
            cout << num << endl;
        }
        SoSimple* GetThisPointer(){
            return this;            //이 문장을 실행하는 객체의 포인터 반환
        }
};

int main(void){
    SoSimple sim1(100);
    SoSimple * ptr1 = sim1.GetThisPointer();    //객체 sim1에 의해 반환된 this를 ptr1에 저장
                                                //this는 SoSimple의 포인터이므로 SoSimple형 변수에 저장
    ptr1 -> ShowSimpleData();

    return 0;
}
  • 따라서, this는 객체 자신의 주소값을 의미한다.
  • this는 주소 값과 자료형이 정해져 있지 않아서 사용자 정의로 잘 맞춰주면 유용하다.

✏️this 활용

  • 매개변수의 이름과 멤버변수의 이름이 동일할 때, this를 사용해서 구분할 수 있음!
class ThisClass{
    private:
        int num;    //멤버변수

    public:
        void ThisFunc(int num){     //매개변수
            this->num = num;        //this가 접근하고 있는 num은 멤버변수, 그 뒤에 나오는 num은 매개변수
            num = 105;              //매개변수의 값 변경
        }
};

✏️Self-Reference

  • *this 라고 하면 이 문장을 실행하는 자신의 포인터가 아닌, 객체 자신을 반환.
  • 이때, 반환형이 참조형이면 객체 자신을 참조할 수 있는 참조 값이 반환됨.
class SelfRef{
    private:
        int num;

    public:
        SelfRef(int n) : num(n){
            cout<<"객체 생성"<<endl;
        }
        SelfRef& Adder(int n){  //리턴 형이 참조형
            num+=n;
            return *this;       //객체 자신을 참조하는 참조 값 반환
        }
        SelfRef& ShowNum(){
            cout<<num<<endl;
            return *this;
        }
}

Tags: ,

Categories:

Updated: