728x90
https://boycoding.tistory.com/250
모든 멤버 함수는 함수가 호출된 객체(인스턴스)를 가리키는 this 포인터를 가지고 있다.
호출된 객체의 주소를 가리키는 상수 포인터다.
상수 포인터 자료형이므로 포인터 자체가 다른 것을 가리키도록 할 수는 없다.
모든 과정은 컴파일러에 의해 자동으로 수행된다.
그러나, 명시적으로 this를 참조해야 하는 경우가 있다.
- 첫째, 멤버 변수와 이름이 같은 매개 변수를 가진 생성자(또는 멤버 함수)가 있는 경우, this를 사용해서 구분할 수 있다.
class Something
{
private:
int data;
public:
Something(int data)
{
this->data = data;
// this->data는 멤버 변수이고,
// data는 매개 변수
}
};
- 둘째, 클래스 멤버 함수가 작업 중이던 객체(인스턴스)를 반환하는 방식이 유용할 때가 종종있다. 이렇게 하면 같은 객체의 여러 멤버 함수를 연속해서 호출할 수 있는 방법이다.
만약 각각의 멤버 함수가 *this를 반환한다면 체이닝 기능이 있는 새로운 버전의 Calc를 만들 수 있다.
class Calc
{
private:
int m_Value = 0;
public:
Calc& Add(int value) { m_Value += value; return *this; }
Calc& Sub(int value) { m_Value -= value; return *this; }
Calc& Mul(int value) { m_Value *= value; return *this; }
int GetValue() { return m_Value; }
}
int main()
{
Calc calc;
calc.Add(5).Sub(3).Mul(4); //함수 체이닝
cout << calc.GetValue() << endl; // 8
return 0;
}
출처: https://boycoding.tistory.com/250 [소년코딩:티스토리]
728x90
'개발 > c++' 카테고리의 다른 글
[Leaks] macOS에서 memory leak 체크하기 🤩 (0) | 2023.10.23 |
---|---|
[디버깅 노트] 메모리 누수를 막으려고... (0) | 2023.10.21 |
[디버깅 노트] null이 된 변수(객체)에는 ... (0) | 2023.10.20 |
[디버깅 노트] 포인터 관련 유의사항 (0) | 2023.10.20 |
[c++] 입력에서 띄어쓰기 (1) | 2023.10.20 |