全网整合营销服务商

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

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

C++如何重载操作符(例如+和

C++重载操作符本质是定义特殊函数(如operator+),成员函数适用于左操作数固定为类对象的场景,非成员函数(常为友元)适用于对称运算或需支持混合类型;赋值运算符=必须为成员函数且需处理自赋值;.、::等操作符不可重载,重载应符合操作符的直观语义。

在C++中重载操作符,本质是定义一个特殊名称的函数(如operator+),让类对象能像内置类型一样使用+===等符号。关键在于:操作符函数可以是成员函数,也可以是非成员函数(常为友元),选择取决于是否需要访问私有成员以及左操作数的类型。

成员函数方式重载二元操作符(如+)

当左操作数一定是该类对象时,用成员函数更自然。它自动接收this指针,只需声明右操作数参数。

  • 函数名固定为operator+,返回类型按需设计(通常返回新对象,避免返回局部对象引用)
  • 参数一般用const引用传递,避免不必要的拷贝
  • 不修改当前对象,应加const限定符

示例:

class Vec {
    int x, y;
public:
    Vec(int x = 0, int y = 0) : x(x), y(y) {}
    Vec operator+(const Vec& other) const {
        return Vec(x + other.x, y + other.y);
    }
};

此时v1 + v2调用v1.operator+(v2),合法且直观。

非成员函数(常配合友元)重载对称操作符

若希望支持int + VecVec + int这类混合运算,或操作符逻辑天然对称(如==),推荐非成员函数。它能平等看待左右操作数。

  • 定义在类外,参数列表含两个操作数(如const Vec&, const Vec&
  • 若需访问私有成员(如xy),需在类内声明为friend
  • >>必须是非成员函数,因为左操作数是std::ostream/std::istream

示例(支持cout ):

class Vec {
    int x, y;
public:
    Vec(int x = 0, int y = 0) : x(x), y(y) {}
    friend std::ostream& operator<<(std::ostream& os, const Vec& v) {
        return os << "(" << v.x << ", " << v.y << ")";
    }
};

重载赋值操作符=的特殊要求

operator=必须是类的成员函数,且编译器会自动生成默认版本。手动重载时需注意:

  • 返回*this(类型为Vec&),以支持链式赋值(如a = b = c
  • 检查自赋值(if (this == &other)),避免释放自身内存后出错
  • 通常要深拷贝资源(如动态分配的数组),并处理异常安全

简版示例:

Vec& operator=(const Vec& other) {
    if (this == &other) return *this;
    x = other.x;
    y = other.y;
    return *this;
}

哪些操作符不宜或不能重载

C++禁止重载.::sizeof?:.*。而&.->等虽可重载,但易破坏直觉,除非实现智能指针等基础设施,否则不建议。

重载的核心原则是:行为要符合用户对操作符的普遍预期。比如+应该不修改操作数、返回新值;==应满足自反性、对称性、传递性。违背这些,代码会变得难以理解和维护。


# c++  # 运算符  # 赋值运算符  # if  # 成员函数  # const  # int  # 指针  # operator  # 引用传递  # 对象  # this  # 适用于  # 链式  # 则是  # 只需  # 这类  # 它能  # 关键在于  # 自动生成  # 能像  # 基础设施 


相关文章: 建站之星代理如何获取技术支持?  建站上市公司网站建设方案与SEO优化服务定制指南  招贴海报怎么做,什么是海报招贴?  内网网站制作软件,内网的网站如何发布到外网?  如何用低价快速搭建高质量网站?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何做静态网页,sublimetext3.0制作静态网页?  广平建站公司哪家专业可靠?如何选择?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  ,购物网站怎么盈利呢?  如何用虚拟主机快速搭建网站?详细步骤解析  济南专业网站制作公司,济南信息工程学校怎么样?  如何通过虚拟主机空间快速建站?  网站制作企业,网站的banner和导航栏是指什么?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  网站代码制作软件有哪些,如何生成自己网站的代码?  红河网站制作公司,红河事业单位身份证如何上传?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  教程网站设计制作软件,怎么创建自己的一个网站?  深圳网站制作案例,网页的相关名词有哪些?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  如何在阿里云ECS服务器部署织梦CMS网站?  Android自定义控件实现温度旋转按钮效果  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  上海网站制作开发公司,上海买房比较好的网站有哪些?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  淘宝制作网站有哪些,淘宝网官网主页?  ,网页ppt怎么弄成自己的ppt?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  PHP 500报错的快速解决方法  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  建站之星官网登录失败?如何快速解决?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  定制建站策划方案_专业建站与网站建设方案一站式指南  如何在Windows虚拟主机上快速搭建网站?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何通过FTP空间快速搭建安全高效网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何设置并定期更换建站之星安全管理员密码?  网站制作免费,什么网站能看正片电影?  如何配置支付宝与微信支付功能?  非常酷的网站设计制作软件,酷培ai教育官方网站?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何快速搭建二级域名独立网站?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何解决VPS建站LNMP环境配置常见问题? 

您的项目需求

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