2011-01-03 3 views
0

비교 연산자 (< =,>, == 등)는 일반적으로 기본 연산자로 구현됩니다. 나머지 비교 연산자를 구현하거나 클래스간에 가능한 모든 비교를 수행하기 위해 사용할 수 있습니까?과부하가 필요한 최소 연산자 집합은 무엇입니까?

+1

연산자 오버로드에 대한 훌륭한 FAQ (http://stackoverflow.com/questions/4421706/operator-overloading/4421719#4421719)를보고 싶을 수도 있습니다. 질문에 대해서도 다루고 있습니다. –

답변

7

당신은 때 다음 등식 사용 ==<의 관점에서 사업자의 여섯을 구현할 수 있습니다 그들은 내가 보통 "기본적으로"때문에 그들의 굴지의 operator<operator==를 구현하고 적용 할 수있는 클래스에 대한

a != b => !(a == b) 
a > b  => b < a 
a >= b => !(a < b) 
a <= b => !(b < a) 
+2

(a == b)는 논리적으로! (a

2

을 표준 알고리즘 및 컨테이너.

다음으로 다른 4 가지를 구현합니다.

가끔 strcmp의 스타일 1, 0, 또는 -1을 반환하고이 측면에서 다른 모든 통신을 구현에 "비교"기능을 구현하고 고려 또 다른 방법. operator<operator==처럼 보이지 않는 코드를 많이 공유해야하는 것처럼 보이는 경우에만이 작업을 수행합니다.

2

일반적으로 개체에 operator==을 구현하고 operator!=을 구현합니다. 많은 오브젝트에는 조합 순서가 없기 때문에 비교 연산자 <, < =,>,> =은 의미가 없습니다.

또한 boost::equality_comparableboost::less_than_comparable 만 사용하면 operator==operator< 만 구현해야합니다. 이것들은 boost/operators.hpp에서 찾을 수 있습니다.

또한 비교 연산자를 기본 클래스 또는 인터페이스 클래스에 배치하는 것이 Descendent_A를 두 개의 다른 자손 클래스 인 Descendent_B와 비교할 수 있으므로 매우 까다로울 수 있다는 것을 알게되었습니다.

비교 연산자는 클래스에서 필요에 따라 구현되어야합니다. 많은 수업에는 필요하지 않습니다. 또한 상속의 파급 효과를 고려하지 않고 기본 클래스에서 구현하거나 정의해야합니다.

관련 문제