• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

클래스 내부엔 this-> 코드가 있기에 인스턴스에서 접근이 가능한거죠?

21.08.06 06:28 작성 조회수 150

1

클래스의 인스턴스들은 각자의 포인터가(주소값이) 있고

그 포인터를 가진 인스턴스를 this로 사용해서

자신의 주소를 출력하거나
클래스의 함수나 변수에 접급할 수 있다는거죠??

클래스 안에 있는 함수나 변수에는 this->라는 코드가 숨겨져있는거고

this-> 코드가 있기에 클래스에 인스턴스들은 클래스 내부에 접근이 가능한거고

void *te()

{

    return this;

}

이런식으로 해봤을떄 비정적 멤버함수 내에서만

사용이 가능하다고 하는데..

그럼 this라는건 클래스와 객체 사이에서만 가능한건가요?

    Calc &add(int value) { m_value += value;  return *this; }

    Calc &sub(int value) { m_value -= value; return *this;}

    Calc& mult(int value) { m_value *= value;return *this; }

이 부분은

Calc 클래스를 참조해서 자기 자신을 반환하니까

각 함수의 값이 자기 자신한테 반환기에 

클래스 안에 함수의 함수를 계속 호출이 가능한거군요

제가 이해한게 맞을까요?

답변 1

답변을 작성해보세요.

2

안소님의 프로필

안소

2021.08.07

안녕하세요 :)

클래스는 실존하지 않는, 이 클래스로부터 만든 객체는 이러이러한 속성과 기능을 가져야한다는 어떠한 추상적인 설계도이고 (비유하자면 머릿 속에 있는 자동차 설계도)

객체는 해당 클래스(설계도)로부터 찍어내 만든 실제로 메모리상에 실존하는 독립된 어떤 개체..? 라고 생각해주시면 되는데요! (설계도를 참고하여 만든 여러 독립된 자동차 개체들)

this 는 이 클래스(설계도)로부터 만들어질 객체의 주소를 나타내는 포인터입니다.

클래스로부터 어떠한 인스턴스를 찍어내어 만들게되면 this 는 자연스레 해당 인스턴스의 주소를 담은 포인터가 되는 것입니다.

예를 들어 Calc c2; 라는 객체가 있다면 이 객체의 주소는 &c2 로 표현이 가능하지만 클래스는 설계도일 뿐이니 클래스 입장에서는 이 클래스로부터 찍어내어 만들 객체의 주소는 아직 모르는 상태인거잖아요? 추상적인 설계도일 뿐이니까요! 그래서 클래스 안에서는 this 라는 통칭으로 인스턴스의 주소를 표현을 하는 것입니다. 인스턴스로서 메모리 상에서 태어나게 되면 this 는 자기 자신의 주소를 가리키는 포인터로 쓰면 된다~! 라고 설계도 상에서 표현 하는 것입니다.

따라서 this 는 오직 클래스 내에서만 쓰입니다. 

아래에 연쇄 호출에 대해 쓰신 부분도 맞게 잘 이해 하셨습니다. 

https://www.inflearn.com/questions/224617

제가 this 를 사용한 연쇄 호출에 대해 자세한 답변을 남긴적이 있는데 한번 참고해보시면 이해에 도움 되실 것 같아요.