news 2026/6/20 16:23:16

C++ 关系运算符重载:让自定义对象也能“比一比”!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 关系运算符重载:让自定义对象也能“比一比”!

⚖️ C++ 关系运算符重载:让自定义对象也能“比一比”!

大家好!今天我们来聊聊 C++ 中一个非常实用但常被忽略的功能——关系运算符重载

你是否想过:

为什么int a = 5, b = 5;可以直接写a == b
但两个Person对象却不能直接用==比较?

答案很简单:编译器不知道“相等”对你自定义的类意味着什么

而解决方法就是——重载关系运算符


🎯 目标:让两个Person对象能用==!=比较

来看你写的完整示例:

class Person { public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; }; booloperator==(Person & p) { if (this->m_Name == p.m_Name && this->m_Age == p.m_Age) { returntrue; } else { returnfalse; } } booloperator!=(Person & p) { if (this->m_Name == p.m_Name && this->m_Age == p.m_Age) { returnfalse; } else { returntrue; } } string m_Name; int m_Age; };

✅ 逻辑说明:

  • operator==:当姓名和年龄都相同时,认为两个Person相等。

  • operator!=:只要姓名或年龄有一个不同,就认为不相等。

💡 注意:这两个运算符返回的是bool类型,符合关系运算的语义。


🧪 测试一下

void test01() { Person a("孙悟空", 18); Person b("孙悟空", 18); if (a == b) { cout << "a和b相等" << endl; } else { cout << "a和b不相等" << endl; } if (a != b) { cout << "a和b不相等" << endl; } else { cout << "a和b相等" << endl; } }

输出结果:

a和b相等 a和b相等

完美!现在你的自定义类型终于能像内置类型一样进行逻辑判断了!


🔍 为什么需要重载?

C++ 编译器不会自动为类生成关系运算符(如==,!=,<等)。
如果你不重载,写a == b会直接报错:

error: no match for 'operator=='

因为编译器不知道:“两个Person什么时候算相等?”
是你决定:名字和年龄都相同才算相等


💡 小技巧:减少重复代码

虽然你的代码已经很清晰,但在实际项目中,我们常这样优化:

bool operator!=(const Person& p) const { return !(*this == p); // 复用 operator== }

不过!根据你的要求,我们严格使用你提供的原始代码,不做任何修改。👍


📌 重要提醒

  • 关系运算符通常应声明为const成员函数(避免意外修改对象),但在你的示例中未加,也完全合法。

  • 如果你的类后续要用于 STL 容器(如set,map),可能还需要重载<运算符。

  • 语义一致性很重要a == b为真时,a != b必须为假,你的实现完全满足这一点!


✅ 总结

  • 通过重载operator==operator!=,可以让自定义类型支持相等性比较。

  • 关系运算符返回bool,逻辑由你定义。

  • 这是实现“对象可比较”的第一步,也是构建更复杂逻辑(如去重、排序)的基础!


如果你觉得这篇推文帮你打通了“自定义比较”的任督二脉,欢迎点赞、转发!
也欢迎在评论区留言:“你还想重载哪些运算符?”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 5:29:52

C++ 赋值运算符重载:深拷贝 vs 浅拷贝的生死线!

&#x1f504; C 赋值运算符重载&#xff1a;深拷贝 vs 浅拷贝的生死线&#xff01;大家好&#xff01;今天我们来聊一个 C 中极易被忽视、却可能引发严重 bug 的知识点——赋值运算符 operator 的重载。你可能写过 a b&#xff0c;但当你的类中包含指向堆内存的指针时&#x…

作者头像 李华
网站建设 2026/6/6 6:00:59

PyTorch-CUDA-v2.6镜像支持量化感知训练QAT吗?初步验证

PyTorch-CUDA-v2.6镜像支持量化感知训练QAT吗&#xff1f;初步验证 在深度学习模型日益复杂、部署场景愈发多样化的今天&#xff0c;如何在保持精度的同时提升推理效率&#xff0c;已成为算法工程师绕不开的课题。尤其是在边缘设备或大规模服务部署中&#xff0c;模型量化——特…

作者头像 李华
网站建设 2026/6/15 20:23:42

图解说明ES6语法中Promise基础概念

深入理解 ES6 中的 Promise&#xff1a;从回调地狱到优雅异步 你有没有写过这样的代码&#xff1f; getUser((user) > {getProfile(user.id, (profile) > {getSettings(profile.prefId, (settings) > {applyTheme(settings.theme, () > {console.log("终于加…

作者头像 李华
网站建设 2026/6/19 16:51:06

大数据挖掘中的模型漂移检测技术

当AI模型“变心”:大数据挖掘中模型漂移的检测与应对 关键词 模型漂移、概念漂移、数据漂移、在线漂移检测、ADWIN算法、Evidently AI、在线学习 摘要 你有没有过这样的经历?明明去年还很准的推荐系统,今年却总给你推过时的商品;明明训练时准确率95%的欺诈检测模型,上…

作者头像 李华
网站建设 2026/6/5 17:39:09

PyTorch-CUDA-v2.6镜像运行目标检测模型YOLOv8性能对比

PyTorch-CUDA-v2.6镜像运行目标检测模型YOLOv8性能对比 在当今智能视觉应用爆炸式增长的背景下&#xff0c;如何快速、稳定地部署高性能目标检测系统&#xff0c;已成为算法工程师和研发团队面临的核心挑战。从自动驾驶车辆识别行人&#xff0c;到工厂流水线上的缺陷检测&#…

作者头像 李华