Я обычно реализую operator==
для объектов, а также operator!=
. Многие объекты не имеют последовательности упорядочения, поэтому операторы сравнения <, <=,>,> = не имеют смысла.
Кроме того, с использованием boost::equality_comparable
и boost::less_than_comparable
необходимо только operator==
и operator<
. Их можно найти в boost/operators.hpp
.
Кроме того, я узнал, что размещение операторов сравнения в базовых предложениях или интерфейсных классах может стать довольно сложным, поскольку они позволяют сравнивать Descendent_A с Descendent_B, которые являются двумя различными классами-потомками.
Операторы сравнения должны быть реализованы по мере необходимости в классах. Многие занятия не нуждаются в них. Также остерегайтесь их реализации или определения в базовых классах без учета последствий наследования.