news 2026/5/2 15:32:29

C++ 运算符重载入门:让“+”也能为自定义类型服务!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 运算符重载入门:让“+”也能为自定义类型服务!

🧠 C++ 运算符重载入门:让“+”也能为自定义类型服务!

大家好!今天我们来聊聊 C++ 中一个既强大又容易被滥用的特性——运算符重载。特别是我们最熟悉的+号,在 C++ 中不仅可以用于数字相加,还能让它为我们的自定义类服务!

💡一句话理解:运算符重载就是给已有的运算符赋予新的含义,使其能作用于我们自己定义的数据类型。


🎯 为什么需要重载加号?

想象一下,你定义了一个表示人的类Person,其中有两个属性:m_Am_B。现在你想把两个Person对象“加起来”,比如把他们的属性分别相加,得到一个新的Person

这时候,如果你直接写:

Person p3 = p1 + p2;

编译器会一脸懵:“+” 是干啥的?我只知道怎么加 int、double……你这 Person 是啥?

所以,我们就需要告诉编译器:“当两个Person相加时,请这样做……”


✅ 成员函数方式重载+

来看你写的Person类:

class Person { public: Person() {}; Person(int a, int b) { this->m_A = a; this->m_B = b; } //成员函数实现 + 号运算符重载 Person operator+(const Person& p) { Person temp; temp.m_A = this->m_A + p.m_A; temp.m_B = this->m_B + p.m_B; return temp; } public: int m_A; int m_B; };

这里通过成员函数重载了+运算符。
当你写p2 + p1时,实际调用的是p2.operator+(p1),把p2的成员和p1的成员分别相加,返回一个新对象。


🌍 全局函数方式(注释掉了,但你知道它存在)

你也可以用全局函数来重载(虽然当前代码中被注释了):

//Person operator+(const Person& p1, const Person& p2) { // Person temp(0, 0); // temp.m_A = p1.m_A + p2.m_A; // temp.m_B = p1.m_B + p2.m_B; // return temp; //}

这种方式更对称,适用于左右操作数类型不同的场景(比如int + Person),但成员函数只能处理“左操作数是当前类对象”的情况。


🔁 运算符重载也支持函数重载!

你可能注意到了这段代码:

//运算符重载 可以发生函数重载 Person operator+(const Person& p2, int val) { Person temp; temp.m_A = p2.m_A + val; temp.m_B = p2.m_B + val; return temp; }

这说明:运算符重载本质上还是函数!所以它可以像普通函数一样被重载。
于是你可以同时支持:

  • Person + Person

  • Person + int

非常灵活!


🧪 完整测试代码(原样保留你的实现)

void test() { Person p1(10, 10); Person p2(20, 20); //成员函数方式 Person p3 = p2 + p1; //相当于 p2.operaor+(p1) cout << "mA:" << p3.m_A << " mB:" << p3.m_B << endl; Person p4 = p3 + 10; //相当于 operator+(p3,10) cout << "mA:" << p4.m_A << " mB:" << p4.m_B << endl; } int main() { test(); system("pause"); return 0; }

输出结果:

mA:30 mB:30 mA:40 mB:40

完美!两个Person相加,或者Person加一个整数,都能按我们期望的方式工作。


⚠️ 重要提醒

总结1:对于内置数据类型(如intdouble等)的运算符行为,无法改变。你不能让1 + 2等于 5!
总结2不要滥用运算符重载!重载后的语义应尽量符合直觉。比如+应该表示“组合”或“累加”,而不是删除、打印或其他奇怪操作。


📌 小结

  • 运算符重载让自定义类型也能使用+ - * /等符号。

  • 可通过成员函数全局函数实现。

  • 支持函数重载,可适配不同类型组合。

  • 语义清晰、符合直觉是良好重载的关键!


如果你觉得这篇推文对你有帮助,欢迎点赞、转发,让更多 C++ 初学者少走弯路!
有任何问题,也欢迎在评论区留言交流~


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

基于协同过滤算法的图书借阅推荐系统vue功能多

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2026/4/29 2:28:46

python微信小程序的社区后勤报修系统

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2026/4/26 20:23:30

python微信小程序的考试刷题及分析系统小程序

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2026/4/18 2:00:23

ComfyUI-ReActor:革命性面部交换技术,轻松打造专业级特效

ComfyUI-ReActor&#xff1a;革命性面部交换技术&#xff0c;轻松打造专业级特效 【免费下载链接】ComfyUI-ReActor Fast and Simple Face Swap Extension Node for ComfyUI (SFW) 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-ReActor 在数字创作的世界里&…

作者头像 李华
网站建设 2026/5/1 21:34:35

零基础学Proteus安装:详细步骤图解说明

零基础也能轻松搞定Proteus安装&#xff1a;从下载到仿真的完整实战指南 你是不是也曾在网上搜“Proteus安装”时&#xff0c;被一堆五花八门的教程搞得晕头转向&#xff1f;弹出的不是“破解失败”&#xff0c;就是“缺少DLL文件”、“无法写入注册表”……明明只是想画个电路…

作者头像 李华
网站建设 2026/4/28 8:30:53

机器学习算法代码大揭秘:从群智能优化到分类回归预测

MATLAB代码 群智能优化算法 分类 回归 时序预测 SVM支持向量机 分类预测 回归预测 29.9 SSA-SVM SMA-SVM PSO-SVM GWO-SVM INFO-SVM JSOA-SVM SO-SVM BES-SVM等等 LSSVM 最小二乘支持向量机 分类预测 回归预测 29.9 SSA-LSSVM SMA-LSSVM PSO-LSSVM GWO-LSSVM INFO-LSSVM JSOA-L…

作者头像 李华