반응형
항목 10 : 대입 연산자는 *this의 참조자를 반환하게 하자
C++의 대입 연산은 여러 개가 사슬처럼 엮일 수 있는 재미있는 성질을 갖고 있습니다.
1
2
3
|
int x, y, z;
x = y = z = 15; // 대입이 사슬처럼 이어집니다.
|
대입 연산이 가진 또 하나의 재미있는 특성은 바로 우측 연관 연산이라는 점입니다.
이렇게 대입 연산이 사슬처럼 엮이려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어 있을 것입니다.
1
2
3
4
5
6
7
8
9
10
|
class Widget {
public :
...
Widget& operator=(const Widget& rhs) // 반환 타입은 현재의 클래스에 대한 참조자입니다.
{
...
return *this; // 좌변 객체(의 참조자)를 반환합니다.
}
...
};
Colored by Color Scripter
|
"좌변 객체의 참조자를 반환하게 만들자"라는 규약은 위에서 보신 단순 대입형 연산자 말고도 모든 형태의 대입 연산자에서 지켜져야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Widget {
public :
...
Widget& operator+=(const Widget& rhs) // +=, -=, *= 등에도 동일한 규약이 적용됩니다.
{
...
return *this;
}
Widget& operator= (int rhs) // 대입 연산자의 매개변수 입이 일반적이지 않은 경우에도 동일한 규약을 적용합니다.
{
...
return *this;
}
...
};
Colored by Color Scripter
|
꼭 잊지 말아야 할 것!
대입 연산자는 *this의 참조자를 반환하도록 만들어라
반응형
'언어 > C++' 카테고리의 다른 글
[Effective C++] 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2020.01.12 |
---|---|
[Effective C++] operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2020.01.11 |
[Effective C++] 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2020.01.09 |
[Effective C++] 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 (0) | 2020.01.08 |
[Effective C++] 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 (0) | 2020.01.07 |