강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

khb4435님의 프로필 이미지
khb4435

작성한 질문수

홍정모의 따라하며 배우는 C++

9.5 증감 연산자 오버로딩 하기

*this

작성

·

201

0

Digit& operator++ (){

        ++m_digit;

        return *this;

    }

    

    //postfix

    Digit operator++ (int){

        Digit temp(m_digit);

        ++(*this);

        return temp;

    }

*this에 대해서 더 알고 싶습니다. 지금 객체에는 멤버변수와 멤버함수가 있고, this는 객체를 포인팅하고 있는 포인터, *this는 멤버 변수가 되는건가요? *this가 객체 자체가 되는거고, *this.m_digit이 말이 되는거 아닌가요? 조금헷갈리네요

퀴즈

사용자 정의 타입에 대해 연산자 오버로딩을 하는 주된 목적은 무엇일까요?

코드 실행 속도를 빠르게 하기 위해

사용자 정의 타입을 내장 타입처럼 자연스럽게 사용하기 위해

객체의 메모리 관리를 자동화하기 위해

클래스의 상속 관계를 정의하기 위해

답변 1

0

안녕하세요

간접 참조 생각해보시면 됩니다!

this 가 객체 의 주소를 담은 포인터라면 

*this 는 당연 '객체 메모리' 그 자체가 되겠죠! 

*this.m_digit 말 됩니다. 

*this.m_digit 혹은 this -> m_digit 이라고 해도 되는데 굳이 이렇게 길게 쓰지 않고 그냥 m_digit 이라고 합니다. 어차피 여기서 말하는 m_digit 은 객체 입장에서 '나'의 (=this의) m_digit 니까요! 

khb4435님의 프로필 이미지
khb4435
질문자

감사합니다.

음, 제가 여쭤봤던 건 살짝 다른겁니다!

그러니까 위 코드에서 *this가 결국 m_digit을 말하는건데요,

*this는 객체메모리 그 자체로서 멤버 변수, 멤버함수들이 있어서 그 중 m_digit을 하려면

*this.m_digit이나 this->m_digit을 해주는게 맞지 않는지 어떻게

*this 로만으로 m_digit이 될 수 있는건지입니다...!

m_digit 은 객체 안에 소속된 멤버일 뿐이지 m_digit 이 객체 그 자체인 것은 아니죠.,.! *this 은 m_digit 이 아닙니다. 위 식에서 ++(*this) 했을 때 m_digit 이 ++ 되었던건 질문자님 코드에 ++ 연산자가 오버로딩 되어있어서 그런거에요. ++ 연산자 오버로딩 내용 보시면, (++객체) 라고 하면 m_digit 을 ++ 하고 return *this 하겠다고 코드가 적혀있죠! 저래서 m_digit 이 ++ 된 것 뿐입니다.  :)

khb4435님의 프로필 이미지
khb4435

작성한 질문수

질문하기