C++如何重载运算符?(operator+示例)


重载 operator+ 是为自定义类定义加法行为,成员函数适用于左操作数为当前类(如 Vec2 a + b),友元函数支持对称运算(如 5.0 + a);均应返回新对象、参数用 const 引用、避免悬垂引用,并注意资源管理类需同步实现拷贝构造与赋值运算符。

c++如何重载运算符?(operator+示例)

重载 operator+ 就是让自定义类的对象能像内置类型一样用 + 相加,关键在于定义一个函数告诉编译器“两个对象相加时具体做什么”。

成员函数方式重载(推荐用于左操作数是当前类的情况)

在类内部定义 operator+ 成员函数,参数是右操作数。它自动获得 this 指针,代表左操作数。

例如,实现两个二维向量相加:

class Vec2 {
public:
    double x, y;
    Vec2(double x = 0, double y = 0) : x(x), y(y) {}

    // 成员函数重载 +
    Vec2 operator+(const Vec2& other) const {
        return Vec2(x + other.x, y + other.y);
    }
};

使用时:Vec2 a(1, 2), b(3, 4); Vec2 c = a + b; —— 调用的是 a.operator+(b)

立即学习“C++免费学习笔记(深入)”;

注意:加 const 修饰符更安全,避免意外修改自身;返回新对象而非引用,符合 + 的语义(不改变原对象)

友元函数方式重载(需要对称性或涉及类型转换时)

当希望支持 int + Vec2Vec2 + int 这类混合运算,或者左操作数不是当前类时,用友元函数更灵活。

例如,支持标量与向量相加:

标贝AI虚拟主播 标贝AI虚拟主播

一站式虚拟主播视频生产和编辑平台

标贝AI虚拟主播 69 查看详情 标贝AI虚拟主播
class Vec2 {
public:
    double x, y;
    Vec2(double x = 0, double y = 0) : x(x), y(y) {}

    friend Vec2 operator+(const Vec2& v, double s) {
        return Vec2(v.x + s, v.y + s);
    }

    friend Vec2 operator+(double s, const Vec2& v) {
        return Vec2(v.x + s, v.y + s);
    }
};

这样 Vec2 a(1,2); auto b = a + 5.0;auto c = 5.0 + a; 都能通过编译。

友元函数不是类成员,不隐含 this,所有参数都显式写出;声明在类内,定义在类外(或直接内联)

返回值和参数传递的常见原则

  • 返回类型通常是新构造的对象(如 Vec2),不是引用——+ 是纯计算,不该修改任一操作数
  • 参数尽量用 const 引用(如 const Vec2&),避免不必要的拷贝
  • 如果函数不修改当前对象,加上 const 限定(成员函数末尾),提高可读性和调用兼容性
  • 不要返回局部变量的引用,也不要返回临时对象的引用——会导致悬垂引用

别忘了考虑赋值运算符(operator=)是否也需要

operator+ 本身不负责内存管理,但如果类里有指针成员、动态分配资源,那 operator=、拷贝构造函数等也得同步实现(遵循三法则/五法则)。

比如只重载了 + 却没写 =,而类中用了 new 分配内存,就可能引发浅拷贝问题。

简单类(仅含基本类型或标准容器)一般不用额外处理;复杂资源管理类必须配套完善。

基本上就这些。operator+ 本质就是个函数名特殊的普通函数,按需选成员或友元,注意语义清晰、参数安全、返回合理就行。

以上就是C++如何重载运算符?(operator+示例)的详细内容,更多请关注其它相关文章!


# 的是  # 营销策划案时间推广节奏  # 玻璃磨边机推广网站  # 齐齐哈尔抖音seo排名  # seo选哪个  # 兖州外贸营销推广代理  # 珠海网站优化实战  # 宁波seo排名营销  # 衢州关键词排名优化技巧  # 安阳营销系统招商推广  # 灵宝网站建设找哪家  # c++  # 管理类  # 用友  # 如何使用  # 自定义  # 加减乘除  # 指令集  # 主播  # 序列化  # 运算符 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 路由器DNS怎么设置最快 优化DNS提升上网速度教程  Yandex世界探索 最新官方免登录入口全知道  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  Go反射进阶:访问内嵌结构体中的被遮蔽方法  steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  iSpring三分屏制作教程  如何在CSS中设置背景图像:一个全面指南  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  动漫之家观看全集库 动漫之家免费资源网地址  Python定时发送QQ消息  《律学法考》查看学习数据方法  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式  Python高效统计字典嵌套列表值在目标列表中的出现次数  Go Goroutine调度与并发执行深度解析  AO3中文入口稳定分享_AO3官网HTTPS看文详解  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  J*aScript模块加载器_RequireJS原理分析  漫蛙manwa漫画官网链接_漫蛙manwa最新可用网址推荐  酷狗音乐多音轨设置教程  第五人格PC版怎么避免被封号_第五人格PC版防封号注意事项  韩小圈网页版PC端入口 韩小圈网页版官方网站入口  《广发易淘金》国债逆回购操作教程  纯CSS实现自适应宽度与响应式布局的水平按钮组  火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  PHP实现等比数列:构建数组元素基于前一个值递增的方法  Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程  小红书如何引流到私信?引流到私信有用吗?  德邦快递会员怎么开通  《我的恋爱逃生攻略》中文名字输入方法  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  中通快递官网指定查询 中通快递单号查询平台入口  网易云音乐闹钟铃声设置教程  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  喜茶GO更换登录账号方法  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  Python项目中的条件导入:解决跨模块依赖问题  163邮箱网页版入口 163邮箱在线使用  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】  Lar*el 中高效执行多列更新:单次查询实现  在Django单元测试中优雅处理信号:基于环境的条件执行策略  iPhone12是否要更新ios16  苹果自助维修计划支持哪些设备机型  极兔快递官网查询入口手机版 手机极兔快递登录查询入口官方  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画 

 2025-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.