C++ 重载运算符和重载函数
前言
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。
当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。
C++ 中的函数重载
在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。
下面的示例中,同名函数 print() 被用于输出不同的数据类型:
#include<iostream>class printdata {
public:void print(int i) {std::cout << "整数为:" << i << std::endl;}void print(double f) {std::cout << "浮点数:" << f << std::endl;}void print(char str[]) {std::cout << "字符串为:" << str << std::endl;}
};int main() {printdata pd;// 输出整数pd.print(5);// 输出浮点数pd.print(500.63);// 输出字符串char c[] = "hello c++";pd.print(c);return 0;
}
输出结果:
C++ 中的运算符重载
您可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
Box operator+(const Box&);
声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:
Box operator+(const Box&, const Box&);
下面的示例使用成员函数演示了运算符重载的概念。在这里,对象作为参数进行传递,对象的属性使用 this 运算符进行访问,如下所示:
#include<iostream>
class Box {
private:double length; // 长度double breadth; // 宽度double height; // 高度public:double getvolume(void) {return length * breadth * height;}void setLength(double len) {length = len;}void setBreadth(double bre) {breadth = bre;}void setHeight(double hei) {height = hei;}// 重载 + 运算符,用于把两个Box对象相加Box operator+(const Box& b) {Box box;box.length = this->length + b.length;box.breadth = this->breadth + b.breadth;box.height = this->height + b.height;return box;}};// 程序的主函数int main() {Box Box1; // 声明Box1,类型为BoxBox Box2; // 声明Box2,类型为BoxBox Box3; // 声明Box3,类型为Boxdouble volume = 0.0; // 把体积存储在该变量中// Box1详述Box1.setLength(6.0);Box1.setBreadth(7.0);Box1.setHeight(5.0);// Box2详述Box2.setLength(12.0);Box2.setBreadth(13.0);Box2.setHeight(10.0);// Box1的体积volume = Box1.getvolume();std::cout << "Box1的体积:" << volume << std::endl;// Box2的体积volume = Box2.getvolume();std::cout << "Box2的体积:" << volume << std::endl;// 把两个对象相加,得到Box3Box3 = Box1 + Box2;// Box3的体积volume = Box3.getvolume();std::cout << "Box3的体积:" << volume << std::endl;return 0;}
输出结果:
可重载运算符/不可重载运算符
下面是可重载的运算符列表:
双目算术运算符 | + (加),-(减),*(乘),/(除),% (取模) |
关系运算符 | ==(等于),!= (不等于),< (小于),> (大于),<=(小于等于),>=(大于等于) |
逻辑运算符 | ||(逻辑或),&&(逻辑与),!(逻辑非) |
单目运算符 | + (正),-(负),*(指针),&(取地址) |
自增自减运算符 | ++(自增),--(自减) |
位运算符 | | (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移) |
赋值运算符 | =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>= |
空间申请与释放 | new, delete, new[ ] , delete[] |
其他运算符 | ()(函数调用),->(成员访问),,(逗号),[](下标) |
下面是不可重载的运算符列表:
-
.:成员访问运算符
-
.*, ->*:成员指针访问运算符
-
:::域运算符
-
sizeof:长度运算符
-
?::条件运算符
-
#: 预处理符号
运算符重载示例
下面提供了各种运算符重载的示例,帮助您更好地理解重载的概念。
序号 | 运算符和示例 |
---|---|
1 | 一元运算符重载 |
2 | 二元运算符重载 |
3 | 关系运算符重载 |
4 | 输入/输出运算符重载 |
5 | ++ 和 -- 运算符重载 |
6 | 赋值运算符重载 |
7 | 函数调用运算符 () 重载 |
8 | 下标运算符 [] 重载 |
9 | 类成员访问运算符 -> 重载 |
相关文章:
C++ 重载运算符和重载函数
前言 C 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个…...
Linux:mongodb数据库基础操作(3.4版本)
安装 3.*版本和4.*版本安装都是一样的 Linux:mongodb数据库源码包安装(4.4.25版本)_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blog.csdn.net/w14768855/article/details/133826626?spm1001.2014.3001.5501 mysql和mongodb对比 登录…...
nginx实现灰度上线(InsCode AI 创作助手)
要基于Nginx实现灰度上线,有以下三种方法: 权重分发:使用Nginx的upstream模块来设置不同服务器的权重。将一部分请求分发给新版本服务器,另一部分请求分发给旧版本服务器。这可以通过以下方式实现: http {upstream bac…...
记:apifox 返回 invalid header token 的问题排查思路
背景: 某接口服务使用 springboot 2.x 开发, RestController 、ReqeustBody 在本地(localhost)调用的时候正常、chrome (.cn域名访问)浏览器访问正常。 换成 apifox (.cn域名访问)、postman (.cn域名访问)调用异常返回:invalid header t…...
【00】神经网络之初始化参数
问题描述 #随机初始化权重 w12 np.random.randn(100, 784)/np.sqrt(784) 为什么除以28 回答 这里的代码是初始化一个深度学习模型中的权重矩阵w12。权重矩阵的形状是(100, 784),这是一个从784个输入节点到100个隐藏节点的全连接层。 除以np.sqrt(784)是权重初始…...
代码随想录Day20 回溯算法 LeetCode77 组合问题
以下内容更详细解释来自于:代码随想录 (programmercarl.com) 1.回溯算法理论基础 回溯法也叫回溯搜索法,是搜索法的一种,我们之前在二叉树中也经常使用到回溯来解决问题,其实有递归就有回溯,有的时候回溯隐藏在递归之下,我们不容易发觉,今天我们来详细介绍一下什么是回溯,它能…...
免费获取天气预报的API接口(Json格式)
免费获取天气预报的API接口(Json格式) 1、接口地址2、城市代码 1、接口地址 当需要获取某个城市天气数据json时候,需要传入一个城市代码编码作为入参,地址: http://t.weather.itboy.net/api/weather/city/xxxxx &…...
安卓程序执行入口
Android程序执行入口 Android应用程序的执行入口是在一个特定的 Java 类中,通常是 MainActivity 或 SplashActivity,具体取决于应用的设计和结构。 Android应用程序的执行入口通常通过以下方式进行定义: 在 AndroidManifest.xml 文件中&am…...
消息队列(中间件)
通信协议: 为了实现客户端和服务器之间的通信来完成的逻辑,基于TCP实现的自定义应用层协议。通过这个协议,完成客户端–服务器远程方法调用。 序列化/反序列化: 通过网络传输对象把对象存储到硬盘上。 序列化:把对象转化为二进制的…...
Java|学习|异常
1.异常 1.1 异常 1.1.1 概述 异常:就是程序出现了不正常的情况。 Error:严重问题,不需要处理。 Exception:称为异常类,它表示程序本身可以处理的问题。 RuntimeException:在编译器不检查,出…...
nextjs项目修改启动端口号,以及开发启动后自动打开浏览器
next版本:13.5.4 一、修改端口 在package.json文件当中修改启动命令 "scripts": {"dev": "next dev -p 3100","build": "next build","start": "next start","lint": "ne…...
微服务架构 | 超时管理
INDEX LSA 级别与全年停机时间速查表LSA 级别实战TP 性能超时时间设计原则 LSA 级别与全年停机时间速查表 计算公式:60 * 60 * 24 * 365 * (1-LSA) 31,536,000 * (1-LSA) 系统级别LSA级别全年停机时间099.999%5分钟099.99%52分钟199.9%8.8小时299%3.65 天 LSA…...
Qt 样式表大全整理
【QT】史上最全最详细的QSS样式表用法及用例说明_qt样式表使用大全_半醒半醉日复日,花落花开年复年的博客-CSDN博客 QT样式表的使用_qt 设置按下 release hover 按钮样式表_create_right的博客-CSDN博客 QPushButton {border-image: url(:/Start_Stop.png); } QPu…...
k8s-10 cni 网络
k8s通过CNI接口接入其他网络插件来实现网络通讯。目前比较流行的插件有flannel,calico等。 CNI插件存放位置: # cat /etc/cni/net.d/10-flannel.conflist 插件使用的解决方案如下: 虚拟网桥,虚拟网卡,多个容器共用一个虚拟网卡进行通信。多路复用: Mac…...
IDEA中.gitignore配置不生效的解决方案
一、创建项目 二、执行以下Git命令 git rm -r --cached . git add . git commit -m "update .gitignore"...
SparkContext 与 SparkContext 之间的区别是什么
SparkContext 是 Spark 的入口点,它是所有 Spark 应用程序的主要接口,用于创建 RDD、累加器、广播变量等,并管理与 Spark 集群的连接。在一个 Spark 应用程序中只能有一个 SparkContext。 而 SparkSession 是 Spark 2.0 新增的 API࿰…...
lv8 嵌入式开发-网络编程开发 17 套接字属性设置
1 基本概念 设置套接字的选项对套接字进行控制除了设置选项外,还可以获取选项选项的概念相当于属性,所以套接字选项也可说是套接字属性有些选项(属性)只可获取,不可设置;有些选项既可设置也可获取 2 选项…...
VulnHub Alice
一、信息收集 发现开发了22、80 2.访问ip,右击查看源代码 发现需要利用X-Forwarded-For 火狐插件:X-Forwarded-For Header 挂上代理后: 出现以下页面: 先注册一个账户,然后再登录 发现有参数进行传参 发现传参&a…...
AUTOSAR组织发布20周年纪念册,东软睿驰NeuSAR列入成功案例
近日,AUTOSAR组织在成立20周年之际发布20周年官方纪念册(20th Anniversary Brochure),记录了AUTOSAR组织从成立到今天的故事、汽车行业当前和未来的发展以及AUTOSAR 伙伴关系和合作在重塑汽车方面的作用。东软睿驰提报的基于AUTOS…...
转行网络安全是否可行?
一、前言 其实很多的IT大佬之前也不是专门学计算机的,都是后期转行的。而且大学学什么专业,对后期的工作真的没有太大关系,这也是现在高校的教育现状。有80%的学生都是通过临时抱佛脚,考前冲刺拿到毕业证书的。下面就带大家详细分…...
netca_crypto.dll找不到怎么修复?详细解决办法和注意事项
当你在使用计算机时,突然出现了一个错误提示:“netca_crypto.dll 找不到”。不知道该如何解决这个问题?其实要解决是非常的简单的,今天我们将为你提供几种修复 netca_crypto.dll 找不到的解决方法和一些注意事项。在深入探讨修复方…...
axios的请求中断和请求重试
请求中断 场景:1、假如一个页面接口太多、或者当前网络太卡顿、这个时候跳往其他路由,当前页面可以做的就是把请求中断掉(优化)2、假如当前接口调取了第一页数据,又调去了第二页的数据,当我们调取第二页数…...
视频怎么压缩?视频太大这样处理变小
在当今时代,视频已经成为了我们日常生活中不可或缺的一部分,然而,视频文件往往非常大,给我们的存储和传输带来了很大的不便,那么,如何有效地压缩视频呢? 一、使用压缩软件 首先我们给大家分享一…...
【MATLAB源码-第48期】基于matlab的16QAM信号盲解调仿真。
操作环境: MATLAB 2022a 1、算法描述 16QAM (16个象限幅度调制) 是一种广泛使用的数字调制技术。在无线和有线通信系统中,为了在固定的带宽内发送更多的信息,高阶调制如16QAM被使用。下面是16QAM盲解调的基本步骤、优缺点及应用场景。 16Q…...
自我介绍思考
1.引导面试官有重点的看你简历 2.在引导部分暗示他我是最适合这个岗位的 面试官在考察什么? a.你的表述是否一致b.考察你的语言表达能力,逻辑思维能力,总结概括能力c.考察你对现场的把控能力d.对时间的把控能力 怎么做? 1.写逐…...
华为eNSP配置专题-VLAN和DHCP的配置
文章目录 华为eNSP配置专题-VLAN和DHCP的配置1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接 3、VLAN的配置3.1、两台PC先配置静态IP3.2、交换机上配置VLAN 4、接口方式的DHCP的配置4.1、在交换机上开启DHCP4.2、在PC上开启DHCP 5、全局方式的…...
微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化
文章目录 授权规则自定义异常结果规则持久化实现Push模式 授权规则 根据来源名称对请求进行拦截 ——>我们需要解析来源名称(RequestOriginParser默认解析都为default),所以我们要自定义一个实现类(根据请求头解析,…...
私有化部署AI智能客服,解放企业成本,提升服务效率
在信息时代,企业面临着服务效率提升和成本压力的双重挑战。作为一个领先品牌,WorkPlus致力于为企业提供私有化部署的AI智能客服解决方案。本文将深入探讨WorkPlus AI智能客服如何帮助企业解放成本、提升服务效率以及打造个性化的卓越客户体验。 AI智能客…...
docker数据卷+挂载(命令讲解+示例)
在容器中管理数据主要有两种方式: 数据卷(Volumes) 、挂载主机目录 (Bind mounts)。 一、数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用。 特点: 对 数据卷 的修改会立马生效对 …...
【webrtc 】FEC 1: 音频RED rfc2198及视频ULPFEC的RED封装
1 参考和引用 M79 代码。 ULPFEC报文构建流程 与大神的分析: WebRTC-FEC协议总结 一致 CrystalShaw 大神的文章 ULPFEC在WebRTC中的实现 WebRTC研究:FEC之RED封装 本文是大神们文章和代码的学习笔记。red封包(rfc2189)1.1 RED(Redundant Coding) 封装 Ulpfec 非均等保护前向纠…...
成都网站网络建设/成都网络营销搜索推广
好的,您已经阅读了Dan Webb的新功能文章“ 使用原型实现无痛JavaScript ”,您会感到无所不能。 现在怎么办? 碰巧,乔纳森斯努克(Jonathan Snook)有答案。 在花了几个小时弄清楚它是如何工作之后,…...
怎么建自己的手机网站/如何快速推广网上国网
一、Appium简介Appium是一个开源的、跨平台的自动化测试工具,支持IOS、Android和FirefoxOS平台。 通过Appium,开发者无需重新编译app或者做任何调整,就可以测试移动应用,可以使测试代码访问后端API和数据库。它是通过驱动苹果的UI…...
清河网站建设电话/成人短期电脑培训班学费
InnovAntennas新品天线测试软件AnsysInnovAntennas已投资Ansys HFSS 2020 R2,这是一个完全基于3维网格的模拟软件包,可帮助完善和生产轻型Yagis的新型OWL和LFA Ultra Yagi。强度大,重量轻和低风载荷是现代业余无线电爱好者们对一款八木天线所…...
外贸高端网站设计/推广引流方法与渠道
前言: this.$nextTick 将回调延迟到下次DOM更新循环之后执行。在修改数据之后立即使用它,然后等待DOM更新。 this.$nextTick 跟全局方法 vue.nextTick 一样,不同的是,回调的 this 自动绑定到调用它的实例上。 总的来说…...
wordpress博客页面/福州短视频seo网站
点击蓝字关注我们企业文化系列之9月12日下午,设计院在第一会议室,组织开展了2020年度第15期《卓越小课堂》学习会,二所晏凯林担任本期授课老师,共22人参加了本期学习。卓越小课堂第十五期本期小课堂课题为《奥维互动地图在实地踏勘…...
珠宝店网站项目网页设计/荆州百度推广
<el-input-number v-model"num" :min"1" :max"10" label"描述文字"></el-input-number> 当num设置为 null 或者 "" 都不能将输入框的值变为空 后来发现 将num 设置为 undefined...