重载运算符操作说明(一)

简介: 重载运算符名字由关键字operator 和其后要定义的运算符号共同组成。重载的运算符也包含返回类型,参数列表,以及函数体。重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。比如 一元运算符有一个参数,二元运算符有两个参数。

重载的运算符有特殊的名字的函数:
重载运算符名字由关键字operator 和其后要定义的运算符号共同组成。
重载的运算符也包含返回类型,参数列表,以及函数体。
重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。比如 一元运算符有一个参数,二元运算符有两个参数。
注意·:
除了重载的函数调用运算符operator()之外,其它重载运算符不能含有默认参数。

关于 成员运算符函数的(显式)参数数量比运算符的运算对象总数少一个 的原因是
第一个左侧运算对象绑定到隐式的 this 指针上。
当运算符作用于内置类型的运算对象时,我们无法改变该运算符的含义
例:
int operator+(int , int);//错误,不能为int 重定义内置运算符
总结:只能重载已有的运算符,无权发布新的运算符号。
±*&既是一元运算符,也是二元运算符,所有这些运算符都能被重载。

下面是总结的一些是否能被重载运算符:

使用重载的运算符本质上是一次函数调用
所以这些关于运算对象求值顺序规则无法应用到重载的运算符上
一般不重载逗号运算符和取地址运算**符
因为这两种运算符已经有了内置的含义
如果重载一般它们的行为将异于常态 从而导致类的用户无法适应。
明智的使用重载运算符
运算符重载 每个运算符在用于内置类型时都有比较明确的含义。
当在内置的运算符和我们自己的操作之间存在逻辑映射关系时,运算符重载的效果最好。
过分滥用运算符重载也会使我们的类变得难以理解。
例如
把operator+定义并让它执行 减法操作 就非常的不友好了。
只有当操作的含义对于用户来说清晰明了时才使用运算符。
如果用户对运算符可能有几种不同的理解,则使用这样的运算符将产生二义性。

赋值和复合赋值运算符赋值运算符的行为与复合版本的类似

:赋值之后,左侧运算对象和右侧运算对象的值相等,并且运算符应该返回它左侧运算对象的一个引用。
重载的赋值运算应该继承而非违背其内置版本的含义。
如果类含有算术运算符则最好也提供对应的复合赋值运算符。
当我们定义运算符时,必须首先判断成员函数还是普通的非成员函数,决定是将其声明为类的成员函数还是声明为一个普通的非成员函数。

下面的准则有助于我们在将运算符定义为成员函数还是普通的非成员函数做出抉择:

●赋值(=)、下标([])、调用(l)和成员访问箭头(->)运算符必须是成员。复合赋值运算符一般来说应该是成员,但并非必须,这一点与赋值运算符不同。
●改变对象状态的运算符或者与给定类型密切相关的运算符,如递增、递诚和解引用运算符,通常应该是成员。
●具有对称性的运算符可能转换任意一端的运算对象,例如算术、相等性、关系和位运算符等,因此它们通常应该是普通的非成员函数。

目录
相关文章
|
前端开发
el-tree菜单权限配置--是否要联动的问题
el-tree菜单权限配置--是否要联动的问题
286 1
|
消息中间件 缓存 网络协议
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 下
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 下
|
Go
golang启动报错【已解决】
golang启动报错【已解决】
248 0
golang启动报错【已解决】
LeetCode 1296. 划分数组为连续数字的集合
LeetCode 1296. 划分数组为连续数字的集合
微信公众平台开发(11)--用户管理,获取关注用户的信息
本文目录 1. 前言 2. 代码 3. 测试 3.1 获取用户列表 3.2 获取用户信息 3.3 修改用户备注 4. 小结
505 0
|
C++
c/c++ 表达式求值
表达式求值 [问题描述] 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。
1426 0
|
6天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1143 3
|
5天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
729 11
|
15天前
|
人工智能 运维 安全