C++中重载相等运算符 ==
相等运算(==)是一种关系运算,与不等运算(!=)关系密切。
通常情况下,C++ 中的类通过定义相等运算符来检验两个对象是否相等。也就是说它们会比较对象的每一个数据成员,只有当所有对应的
成员都相等时才认为两个对象相等。依据这一思想,我们的 Sales_data 类的相等运算符不但应该比较 bookNo,还应该比较具体的销售
数据:
bool operator==(const Sales data &lhs, const Sales data &rhs)
{
return lhs.isbn() == rhs.isbn() &&
lhs.units_sold == rhs.units_sold &&
lhs.revenue == rhs.revenue;
}
bool operator!=(const Sales_data &lhs, const Sales_data &rhs)
{
return !(lhs == rhs);
}
就上面这些函数的定义本身而言,它们似乎比较简单,也没什么价值,对于我们来说重要的是从这些函数中体现出来的设计准则:
-
如果一个类含有判断两个对象是否相等的操作,则它显然应该把函数定义成 operator== 而非一个普通的命名函数:因为用户肯定希
望能使用 == 比较对象,所以提供了 == 就意味着用户无须再费时费力地学习并记忆一个全新的函数名字。此外,类定义了 == 运算符
之后也更容易使用标准库容器和算法。
-
如果类定义了 operator==,则该运算符应该能判断一组给定的对象中是否含有重复数据。
-
通常情况下,相等运算符应该具有传递性,换句话说,如果 a == b 和 b == c 都为真则 a == c 也应该为真。
-
如果类定义了 operator==,则这个类也应该定义 operator!= 。对于用户来说,当他们能使用 == 时肯定也希望能使用 !=,反之亦然。
-
相等运算符和不相等运算符中的一个应该把工作委托给另外一个,这意味着其中一个运算符应该负责实际比较对象的工作,而另一个运算符则只是调用那个真正工作的运算符。
如果某个类在逻辑上有相等性的含义,则该类应该定义 operator==,这样做可以使得用户更容易使用标准库算法来处理这个类
该文章会更新,欢迎大家批评指正。文章来源:https://www.toymoban.com/news/detail-524150.html
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器文章来源地址https://www.toymoban.com/news/detail-524150.html
到了这里,关于C++中重载相等运算符 ==的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!