四、关系运算符
1、相等运算符
如果所有对应成员都相等,则认为两个对象相等。
inline
bool operator==(const Sales_item &lhs,const Sales_item &rhs)
{
return lhs.revenue == rhs.revenue && lhs.units_sold == rhs.units_sold &&
lhs.same_isbn(rhs);
}
inline
bool operator!=(const Sales_item &lhs,const Sales_item &rhs)
{
return !(lhs == rhs);
}
1)如果类定义了==操作符,该操作符的含义是两个对象包含同样的数据。
2)如果类具有一个操作,能确定该类型的两个对象是否相等,通常将该函数定义为 operator==而不是创造命名函数。用户将习惯于用==来比较对象,而且这样做比记住新名字更容易。
3)如果类定义了operator==,它也应该定义operator!=。用户会期待如果可以用某个操作符,则另一个也存在。
4)相等和不操作符一般应该相互联系起来定义,让一个操作符完成比较对象的实际工作,而另一个操作符只是调用前者。
定义了operator==的类更容易与标准库一起使用。有些算法,如find,默认使用==操作符,如果类定义了==,则这些算法可以无需任何特殊处理而用于该类类型!
2、关系操作符
定义了相等操作符的类一般也具有关系操作符。尤其是,因为关联容器和某些算法使用小于操作符(<),所以定义了operator<可能相当有用。
如果因为<的逻辑定义与==的逻辑定义不一致,所以这样的话,不定义<会更好。
【注释】
关联容器以及某些算法,默认使用<操作符(此处本人认为译者翻译有误,原文:...usethe < operator bydefult...,译者翻译为:使用默认<操作符,但本人认为默认使用更为恰当!)。一般而言,关系操作符,诸如相等操作符,应定义为非成员函数(“对称”操作符)。