C++

연산자 오버로딩(전위/후위 증감 연산자)

종황이 2020. 10. 27. 12:55

연산자 오버로딩은 객체지향 프로그래밍의 특성인 다형성의 한 종류입니다. 연산자를 직접 사용자가 정의하는 것을 의미합니다. 그 중 증감 연산자에 대해 다뤄보겠습니다.

operator++(); // ++x
operator--(); // --x

operator++(int x); // x++
operator--(int x); // x--

operator++(int); // x++
operator--(int); // x--

위와 같이 쓰는데 인자 x는 아무 의미가 없습니다. 단순히 컴파일러 상에서 전위와 후위를 구별하기 위해 int 인자를 넣어주는 것입니다. 따라서 생략 가능합니다.

 

한가지 중요한 점은, 전위 증감 연산의 경우 값이 바뀐 자기 자신을 리턴해야 하고, 후위 증감 연산의 경우 값이 바뀌기 이전의 객체를 리턴해야 된다는 점입니다.

 

그러므로 전위의 경우,

A& operator++() {
// A++ 을 수행한다.
return *this;
}

전위 연산자는 간단히 ++에 해당하는 연산을 수행한 후에 자기 자신을 반환합니다.

 

후위의 경우,

A operator++(int) {
A temp(A);
// A++ 을 수행한다.
return temp;
}

++을 하기전에 객체를 반환해야 하므로, temp 객체를 만들어서 이전 상태를 기록한 후에, ++을 수행하고 temp 객체를 반환하게 됩니다.

 

따라서 후위 증감 연산의 경우 추가적으로 복사 생성자를 호출하기 때문에 전위 증감 연산보다 더 느립니다.

'C++' 카테고리의 다른 글

상속 (Inheritance)  (0) 2020.10.27
C++ 에서의 캐스팅(형변환)  (0) 2020.10.27
malloc과 new의 차이  (0) 2020.10.24
스택, 힙, 코드, 데이터 영역  (0) 2020.10.23
참조자(레퍼런스)  (0) 2020.10.23