全网整合营销服务商

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

免费咨询热线: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  # 自定义  # 用友  # 管理类  # 的是  # 是个  # 都能  # 做什么  # 适用于  # 就行 


相关文章: 定制建站哪家更专业可靠?推荐榜单揭晓  如何快速辨别茅台真假?关键步骤解析  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何快速上传自定义模板至建站之星?  建站之星导航配置指南:自助建站与SEO优化全解析  建站之星安装模板失败:服务器环境不兼容?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何配置IIS站点权限与局域网访问?  香港服务器租用每月最低只需15元?  建站之星如何配置系统实现高效建站?  如何通过IIS搭建网站并配置访问权限?  长沙企业网站制作哪家好,长沙水业集团官方网站?  青岛网站建设如何选择本地服务器?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何在阿里云虚拟主机上快速搭建个人网站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何快速配置高效服务器建站软件?  建站DNS解析失败?如何正确配置域名服务器?  焦点电影公司作品,电影焦点结局是什么?  建站三合一如何选?哪家性价比更高?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何通过云梦建站系统实现SEO快速优化?  如何安全更换建站之星模板并保留数据?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  如何正确下载安装西数主机建站助手?  网站制作网站,深圳做网站哪家比较好?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  独立制作一个网站多少钱,建立网站需要花多少钱?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何选择高效可靠的多用户建站源码资源?  郑州企业网站制作公司,郑州招聘网站有哪些?  香港网站服务器数量如何影响SEO优化效果?  制作证书网站有哪些,全国城建培训中心证书查询官网?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  如何选择适合PHP云建站的开源框架?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  北京网站制作网页,网站升级改版需要多久?  家具网站制作软件,家具厂怎么跑业务?  建站之星免费版是否永久可用?  网站制作难吗安全吗,做一个网站需要多久时间?  建站之星各版本价格是多少?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  如何彻底删除建站之星生成的Banner?  模具网站制作流程,如何找模具客户?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  制作门户网站的参考文献在哪,小说网站怎么建立?  建站之星后台密码如何安全设置与找回? 

您的项目需求

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