대입 연산자는 *this의 참조자를 반환하게 하자.
윤성우의 열혈강의를 포스팅할 때 잠깐 언급했던 부분이다.
상당히 간결한 내용이므로 핵심만 짚고 후딱 넘어가도록 하겠다.
class AAA{
private:
int x;
int y;
public:
AAA(int _x, int _y) : x(_x), y(_y) {};
AAA& operator=(const AAA& rhs){
x = rhs.x;
y = rhs.y;
return *this;
}
};
int main(){
AAA a(1,2);
AAA b(3,4);
AAA c(5,6);
a = b = c;
}
대입 연산은 우측 연관 연산이다.
즉 ,위의 경우 a = (b = c);
1. AAA operator=(const AAA& rhs);
2. AAA& operator=(const AAA& rhs);
이번 항목의 제목은 *this의 참조자를 반환하게 하자는 것이다.
그럼 참조자를 반환하지 않으면 어떻게 될까?
1번의 경우 반환되는 값이 복사생성자에 의해 복사되어 리턴된다.
그리고 자기자신이 아닌 복사본이 그 자리에 위치하게 되는 것.
단항연산자를 오버로딩 하는 경우, 참조자를 리턴받지 않으면
++(++a); 이와같은 연산이 불가능하다.
밑줄 친 부분에 자기자신이 아닌, 복사본이 위치하기 때문에
제대로된 연산이 이루어 지지 않는다.
이 부분에 대해서는 C++ 카테고리의
연산자 오버로딩이라는 포스팅을 참고하기 바란다.
POINT!!
대입 연산자 (=, +=, -=, *= 등)는 *this의 참조자를 반환하도록 하자.
'C++ 심화' 카테고리의 다른 글
[C++] 객체의 복사 (0) | 2016.12.20 |
---|---|
[C++] opeator=의 자개대입에 대한 처리 (0) | 2016.12.20 |
[C++] 객체 생성, 소멸 시의 가상 함수 호출 (0) | 2016.12.19 |
[C++] 소멸자와 예외처리 (0) | 2016.12.19 |
[C++] 가상(virtual) 소멸자 (0) | 2016.12.18 |