全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

重载 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)

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

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

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

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

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++  # 运算符  # 赋值运算符  # 成员函数  # 构造函数  # const  # auto  # 局部变量  # int  # 指针  # 重载运算符  # operator  # 类型转换  # 对象  # this  # 自定义  # 用友  # 管理类  # 的是  # 是个  # 都能  # 做什么  # 适用于  # 就行 


相关文章: ,巨量百应是干嘛的?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  ,有什么在线背英语单词效率比较高的网站?  如何在云主机上快速搭建多站点网站?  如何在IIS7上新建站点并设置安全权限?  浅析上传头像示例及其注意事项  网站图片在线制作软件,怎么在图片上做链接?  建站主机无法访问?如何排查域名与服务器问题  建站之星伪静态规则如何设置?  如何获取上海专业网站定制建站电话?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  已有域名和空间如何搭建网站?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  如何通过商城免费建站系统源码自定义网站主题?  建站VPS能否同时实现高效与安全翻墙?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  制作网站的模板软件,网站怎么建设?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何用西部建站助手快速创建专业网站?  制作电商网页,电商供应链怎么做?  建站之星如何保障用户数据免受黑客入侵?  如何在万网开始建站?分步指南解析  广州美橙建站如何快速搭建多端合一网站?  临沂网站制作公司有哪些,临沂第四中学官网?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  油猴 教程,油猴搜脚本为什么会网页无法显示?  建站之星后台密码遗忘或太弱?如何重置与强化?  贸易公司网站制作流程,出口贸易网站设计怎么做?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  中山网站制作网页,中山新生登记系统登记流程?  如何通过二级域名建站提升品牌影响力?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  动图在线制作网站有哪些,滑动动图图集怎么做?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  如何通过宝塔面板实现本地网站访问?  如何快速搭建虚拟主机网站?新手必看指南  网站专业制作公司有哪些,做一个公司网站要多少钱?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何快速打造个性化非模板自助建站?  网站网页制作专业公司,怎样制作自己的网页?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  建站之星代理平台如何选择最佳方案?  建站之星安装后界面空白如何解决?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。