重载 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 + Vec2 或 Vec2 + 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=、拷贝构造函数等也得同步实现(遵循三法则/五法则)。
比如只重载了 + 却没写 =,而类中用了 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小时内与您取得联系。