(전체가 아니라 C#과 차이가 있는 부분을 중심으로 요약 정리)

연산자 오버로딩 개요

연산자 오버로딩을 하는 이유

연산자를 오버로딩 하는 이유는 자신이 정의할 클래스를 기본타입처럼 다루기 위함과 프로그램을 좀 더 세밀하게 제어하기 위함이다.

연산자 오버로딩의 한계

다음과 같은 것은 연산자 오버로딩을 할 수 없다.

연산자 오버로딩 선택

연산자 오버로딩은 operatorX 란 이름의 메서드나 함수를 정의하는 방식으로 정의한다. 여기서 X 자리에 오버로딩할 연산자 기호를 적는다. operator와 X사이에 공백이 있어도 된다. 예컨대 9장에 나온 SpreadsheetCell은 operator+ 연산자를 다음과 같이 선언했다.

SpreadsheetCell operator+(const SpreadsheetCell& lhs, const SpreadsheetCell& rhs);

메서드와 전역 함수

오버로딩할 연산자를 클래스의 메서드로 정의할지, 전역 함수(주로 클래스의 friend)로 정의할지 선택해야 한다. 그러기 위해서는 먼저 두 방식의 차이점부터 알아야 한다. 연산자가 클래스의 메서드일 때는 연산자를 사용한 표현식의 좌변은 반드시 그 클래스의 객체여야 한다. 반면 전역 변수로 정의하면 좌변에 다른 타입의 객체를 적을 수 있다.

연산자는 크게 3 종류가 있다.