728x90
반응형
this
class 내부에서 this는 자기 자신의 주소를 나타내는 포인터를 말한다.
따라서 아래 코드처럼 this와 객체의 주소를 출력해 보면 같은 값이 나오는 것을 확인할 수 있다.
#include <iostream>
using namespace std;
class testclass {
public:
testclass() {
cout << this << endl;
}
};
int main() {
testclass test;
cout << &test;
return 0;
}
메서드 체이닝 (Method Chaining)
메서드 체이닝이란 메서드를 꼬리 물듯 호출하는 디자인 패턴을 말한다.
아래 코드처럼 this 지시자를 활용하면 이러한 코드를 작성할 수 있다.
#include <iostream>
#include <cstring>
using namespace std;
class SelfRef{
private:
int num;
public:
SelfRef(int n)
:num(n)
{
cout << "객체생성" << endl;
}
SelfRef& Adder(int n) {
num += n;
return *this;
}
SelfRef& ShowTwoNumber() {
cout << num << endl;
return *this;
}
};
int main() {
SelfRef obj(3);
SelfRef& ref = obj.Adder(2);
obj.ShowTwoNumber();
ref.ShowTwoNumber();
ref.Adder(1).ShowTwoNumber().Adder(2).ShowTwoNumber();
return 0;
}
위 코드에서 Adder와 ShowTwoNumber 메서드는 모두 *this를 반환한다.
*this는 포인터인 this에 접근하여 객체 그 자체를 가리킨다.
따라서 참조자 ref를 선언하고 Adder의 반환값인 *this, 즉 obj를 대입해 주는 것이다.
결국 Adder의 실행 후 obj의 이명(異名)으로 ref라는 별칭이 생기게 되는 것이다.
같은 원리로 Adder와 ShowTwoNumber 메서드가 반환값이 obj이니 반환값에서 도트연산자를 통해
메서드를 호출할 수 있게 되는 것이다.
728x90
반응형
'C++ > C++ 문법' 카테고리의 다른 글
[C++] explicit (0) | 2024.04.30 |
---|---|
[C++] 복사 생성자를 활용한 객체의 대입 (0) | 2024.04.29 |
[C++] 객체 배열 (0) | 2024.04.29 |
[C++] 멤버 이니셜라이저 (Member Initializer), const 멤버변수 초기화 (0) | 2024.03.31 |
[C++] 생성자와 소멸자, 생성자의 오버로딩, 디폴트 생성자, 객체의 동적할당 (0) | 2024.03.22 |