C++ 기초적인 질문입니다.

조회수 546회
class Person{
public:

    Person *GetThis() {
        return this;
    }
    void *VgetThis() {
        return this;
    }
};
int main() 
{

    Person *p1 = new Person();
    cout << p1 << endl;
    cout << p1->GetThis() << endl;
    cout << p1->VgetThis() << endl;
    return 0;
}

Person 클래스 내부 함수로 GetThis 함수와 VgetThis 함수를 선언해서 객체의 주소값을 출력하는 함수를 짜보았는데요. void 함수로 선언했는데도 불구하고 리턴 사용하여 주소값을 보낼 수 있더라구요 두 함수의 차이점을 좀 알 수 있을까요.

1 답변

  • void *VgetThis()
    {
        return this;
    }
    

    VGetThis 함수의 return type은 void가 아니라 void* 입니다.

    void*는 역참조는 불가능하지만 엄연히 주소값을 저장하고 있는 포인터타입입니다.

    따라서 "return value가 없다" 라는 의미의 void 와는 전혀 다른 의미가 되는 것입니다.

    참고로 memory allocation 할 때 사용하는 malloc 이나 calloc 같은 함수들도 void* 를 return 합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변 감사합니다. 그럼 한가지 더 궁금한 점이 있는데, 클래스 Person 안에서 Person return type으로 함수를 정의한다는건 생성자 재정의 함수로 볼 수 잇는건가요? 왜 클래스 안에서 클래스 리턴 타입의 함수(*GetThis())를 사용하는 지 잘 이해가 되지 않습니다. 알 수 없는 사용자 2019.1.28 09:51
    • 생성자는 클래스로부터 인스턴스가 생성될 때 최초로 호출되는 메소드입니다. 위의 Person* 을 리턴하는 메소드는 단순히 현재 인스턴스의 포인터(참조)를 리턴한다는 의미로 생성자와는 다른 개념입니다. 포인터에 대한 개념을 헷갈려하시는 것 같은데 포인터에 대한 학습을 조금 더 하셔야 될 것 같습니다. 알 수 없는 사용자 2019.1.28 11:18

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)