728x90
this 포인터
일반 메서드를 호출하면 항상 메서드가 속한 객체의 포인터인 this가 숨겨진 매개변수 형태로 전달된다.
this 포인터로 해당 객체의 데이터 멤버나 메서드에 접근할 수 있으며,
다른 메서드나 함수에 매개변수로 전달할 수도 있다. 떄로는 이름을 명확히 구분하는 용도로도 사용된다.
예를 들어 SpreadsheetCell 클레스에 mValue가 아닌 value란 이름으로 데이터 멤버를 만들고,
이 값을 설정하는 setValue() 메서드가 받는 매개변수 이름도 inValue가 아닌 value라고 정했다고 하자.
그러면 코드는 다음과 같다.
void SpreadsheetCell::setValue(double value)
{
value = value; // 모호한 문장
}
이렇게 작성하면 value가 클래스 멤버인지 메서드 매개변수인지 구분할 수 없다.
이 문장에서 이름을 명확히 구분하려면 다음과 같이 this 포인터를 적으면 된다.
void SpreadsheetCell::setValue(double value)
{
this->value = value;
}
어떤 객체의 메서드 안에서 다른 메서드나 함수를 호출하는 과정에서 그 객체의 포인터를 전달할 때도 this 포인터를 사용한다. 예를 들어 다음과 같이 printCell()이라는 함수를 별도로 만든 경우를 생각해보자.
void printCell(const SpreadsheetCell& cell)
{
cout << cell.getString() << endl;
}
printCell() 함수를 setValue() 메서드 안에서 호출하려면 반드시 *this를 인수로 전달해야 한다.
그래야 printCell() 안에서 호출할 메서드는 자신을 호출한 setValue()가 속한 것임을 알 수 있다.
void SpreadsheetCell::setValue(double value)
{
this->value = value;
printCell(*this);
}
'💻프로그래밍 내용 정리 > C++17' 카테고리의 다른 글
[C++ 8.3.1-1] 객체 생성과 생성자 (1) | 2022.10.15 |
---|---|
[C++ 8.2.3] 객체 사용법 (0) | 2022.10.03 |
[C++ 8.2.2-1] 메서드 정의 방법 (0) | 2022.10.03 |
[C++ 8.2.1] 클래스 정의 (0) | 2022.10.03 |
[C++ 7.5.1] 메모리 누수, 비주얼 C++을 이용한 메모리 누수 탐지 및 수정 방법 (0) | 2022.10.03 |