c++ 클래스와 배열 그리고 this 포인터

‍정진철·2022년 9월 4일
0

C++

목록 보기
9/18

1) 객체 배열

출처 : 윤성우의 열혈 c++ 프로그래밍 ,두들낙서의 C/C++ 강좌

A Obj1
B Obj2 생성..

& Obj1 , &Obj2 출력시 해당 주소값도 출력되지만 클래스 타입인 A,B역시 같이 출력된다.

따라서 Obj1, Obj2 안에서의 'this'가 가르키는것은 주소값(0x100, 0x200) 과 더불어 데이터 타입인 A,B역시 같이 가르키고 있는 것 이다.

Obj1의 멤버변수 'm'이 존재할 시 this -> m = 50 ; 이라고 할당하면 해당 값이 할당한 값으로 설정된다.

this

" 객체 자신을 가르키는 포인터다."

  • 첫번째 배열의 경우 객체로 이루어진 배열이다.
  • 두번째는 객체 포인터 배열로서 객체를 저장할 수 있는 포인터 변수로 이루어진 배열이다. 따라서 추가적인 객체 생성과정이 필요하다.


this 포인터의 이해

#include <iostream>

using namespace std;

class SoSimple
{
private:
    int num;

public:
    SoSimple(int n) : num(n)
    {
        cout << "num=" << num << " , ";
        cout << "address: " << this << endl; //주소값출력
    }
    void ShowSimpleData()
    {
        cout << num << endl;
    }
    SoSimple *GetThisPointer()
    {
        return this;
    }
};

int main(void)
{
    SoSimple sim1(100);
    SoSimple *ptr1 = sim1.GetThisPointer();
    cout << ptr1 << endl; //주소값출력
    ptr1->ShowSimpleData();

    return 0;
}

  • 아래와 같이 매게변수로 받지 않고 빈 매게변수로 받는 이유는 '보이지 않는 매게변수'가 이미 존재하기때문이다.
  • 모든 class의 멤버함수들은 전부, 보이지 않는 this 포인터를 가지고 있다.
  • Printthis 는 Myclass의 객체에 포함되어있는 것이 아니라 다른 공간내에 있어 this라는 포인터를 매게변수로 받음으로써 Printthis가 어디 객체 소속인지를 알 수 있다.


this 포인터 활용

  • this -> num1 은 멤버변수 num1 을 뜻하고
    뒤에 나오는 num1은 매게변수 num1을 가르킨다.


profile
WILL is ALL

0개의 댓글