들어가면서
이번 글은 아래 글의 후속편이다. this 포인터에 대해 잘 모르겠으면 아래 글을 보고 다시 오자!
https://logicallaw.tistory.com/entry/C-클래스-내부의-this-포인터의-역할
C++ : 클래스 내부의 this 포인터의 역할(this->멤버, (*this).멤버)
this 포인터 클래스 내부에서 this 포인터는 모든 멤버함수의 default 매개변수이다. (자세히 말하면, friend 함수를 제외하고 모든 멤버함수에 존재한다.) 즉, 모든 멤버함수(또는 생성자)에서 this 포
logicallaw.tistory.com
Cascaded Function Calls이란?
Cascaded Function Calls는 멤버함수 체이닝 또는 연쇄호출이라고 불리기도 한다.(이하 멤버함수 체이닝)
멤버함수 체이닝이란 멤버함수가 객체(자기자신)을 리턴하여 연속적으로 멤버함수를 호출할 때 사용하는 방법이다.
사용방법은 다음과 같다.
return *this;
멤버함수 리턴시 역참조 포인터를 반환하면 된다.
this 포인터는 기본적으로 거의 모든 멤버함수의 default 매개변수로 가지고 있는데 이를 역참조한 뒤 리턴하면, 객체 자기 자신이 된다.
따라서, main 함수에서 연속적으로 멤버함수를 호출하고 싶을 때 아래 예제처럼 호출하면 된다.
#include <iostream>
using namespace std;
class Tmp{
private:
int number = 1;
public:
Tmp() = default;
Tmp& Add(int n) {
number += n;
return *this;
}
Tmp& Sub(int n) {
number -= n;
return *this;
}
Tmp& Mul(int n){
number *= n;
return *this;
}
int getNumber() const { return number; }
};
int main(void){
Tmp t1;
t1.Add(3).Sub(2).Mul(10); //1->4->2->20
cout << t1.getNumber() << endl; //20
return 0;
}
return을 *this로 하는 멤버함수의 리턴타입은 리턴값이 객체 자기 자신이므로, 멤버함수 정의시 같은 클래스 타입으로 적어야만 한다.
또한, 여기서 참조자(&)를 사용하여 객체의 값이 pass-by-reference 방식으로 전달되도록 한다.
'C++' 카테고리의 다른 글
C++ : 클래스 멤버의 연산자 오버로딩이란? (0) | 2024.04.07 |
---|---|
C++ : 클래스 내부의 this 포인터의 역할(this->멤버/(*this).멤버) (0) | 2024.03.20 |
C++ : 변환생성자(conversion constructor)란? (매개변수 생성자와의 차이점은?) (0) | 2024.03.20 |
C++ : friend 키워드란? (0) | 2024.03.18 |
C++ : cin >> int배열;은 왜 불가능 할까? (0) | 2024.03.15 |