当前位置: 首页 > news >正文

C++(三)——运算符重载

运算符重载

重定义或重载大部分 C++ 内置的运算符就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。不能为了重载而重载     重载之后的运算符和原来的使用方式特性一模一样

可重载的运算符列表

双目算术运算符	+ (加),-(减),*(乘),/(除),% (取模)关系运算符	==(等于),!= (不等于),< (小于),> (大于),<=(小于等于),>=(大于等于)逻辑运算符	||(逻辑或),&&(逻辑与),!(逻辑非)单目运算符	+ (正),-(负),*(指针),&(取地址)自增自减运算符	++(自增),--(自减)位运算符	| (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移)赋值运算符	=, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=空间申请与释放	new, delete, new[ ] , delete[]其他运算符	()(函数调用),->(成员访问),,(逗号),[](下标)

不可重载的运算符列表

.              :成员访问运算符
->           :成员指针访问运算符
::            :域运算符
sizeof    :长度运算符
?:          :条件运算符
#           : 预处理符号

+ - 两个运算符的重载

#include <iostream>using namespace std;class dog 
{private:int weight ;string name;public://构造函数dog(string name , int weight){this->name = name ;this->weight = weight ;}//拷贝构造dog(const dog & obj){this->name = obj.name;this->weight = obj.weight;}//移动dog(const dog && obj){this->name = obj.name;this->weight = obj.weight;}//析够函数~dog(){}//+两只狗体重之和dog & operator +(const dog & obj ){static dog temp(" ",1);temp.weight = this->weight + obj.weight;temp.name = this->name + "和" + obj.name;return temp;}//-两只狗体重之差dog & operator -(const dog & obj ){static dog temp(" ",1);temp.weight = this->weight - obj.weight;temp.name = this->name + "和" + obj.name+"体重相差";return temp;}friend ostream & operator <<(ostream & os , dog & obj );};//输出<<重载
ostream & operator <<(ostream & os , dog & obj )
{os<<"名字:"<<obj.name<<endl<<"体重:"<<obj.weight<<endl;return os;
}int main()
{dog g1("土狗🐶",25);dog g2("小狗🐶",26);cout<<g1<<g2;cout<<g1+g2;cout<<g2-g1;return 0;
}

运行结果:
在这里插入图片描述


其他运算符实例代码

#include <iostream>
#include <cstring>using namespace std;class Arr
{private:char * arr;int len ;int size;public://构造Arr(char * str){len = strlen(str);size = len+1;arr = new char[size];strcpy(arr,str);}//拷贝构造🐶Arr(Arr & obj){arr = new char[obj.size];len = obj.len;size = obj.size;strcpy(arr,obj.arr);}//🐣移动构造🐶Arr(Arr && obj ){len = obj.len;size = obj.size;arr = obj.arr;obj.arr = nullptr;}//+=重载:两个字符串连接Arr & operator +=(const Arr &obj){if(obj.len + this->len > this->size ){char * p = new char[obj.len+len+1];strcpy(p,arr);delete []arr;arr = p ;p = nullptr;size = obj.len+len+1;}strcat(arr,obj.arr);len = len + obj.len ;return *this;}//= 实现字符串复制功能🐮Arr & operator =(const Arr &obj){if(obj.len > size ){char *p = new char[obj.size];strcpy(p,obj.arr);arr = p ;p = nullptr;size = obj.size;}else{strcpy(this->arr,obj.arr);}len = obj.len;return *this;}//[] 🏇char & operator [](const int i ){   return arr[i];}//()🦆void operator ()(){cout<<"hello new ()"<<endl;}friend ostream & operator <<(ostream & os , const Arr & obj);friend istream & operator >>(istream & is , const Arr & obj );};ostream & operator <<(ostream & os , const Arr & obj)
{os<<"data:"<<obj.arr<<endl<<"len ="<<obj.len<<endl<<endl<<"size="<<obj.size<<endl;return os;}istream & operator >>(istream & is , const Arr & obj )
{is>>obj.arr;return is;
}
int main()
{char buf[] = {"n牛🐮"};char buf1[] = {"m马🏇"};Arr a = buf;Arr b = buf1;cout<<a<<endl;a +=b;cout<<a<<endl;a=b;cout<<a<<endl;a[0]= 't';cout<<a<<endl;a();cin>>a;cout<<a<<endl;}

相关文章:

C++(三)——运算符重载

运算符重载 重定义或重载大部分 C 内置的运算符就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数&#xff0c;函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样&#xff0c;重载运算符有一个返回类型和一个参数列表。不能为了重载而重…...

【Springcloud】elk分布式日志

【Springcloud】elk分布式日志 【一】基本介绍【二】Elasticsearch【1】简介【2】下载【3】安装【4】启动 【三】Logstash【1】简介【2】下载【3】安装【4】启动 【四】Kibana【1】简介【2】下载【3】安装【4】启动 【五】切换中文【六】日志收集 【一】基本介绍 &#xff08;…...

华为mate60麒麟9000s的架构体系

...

面试半个月后的一些想法

源于半个月面试经历后的一些想法&#xff0c;刚开始想的是随便写写&#xff0c;没想到居然写了这么多。 找不到目标找不到意义亦或是烦躁的时候&#xff0c;就写写文章吧&#xff0c;把那些困扰你很久的问题铺开来 花时间仔细想想&#xff0c;其实真正让我们生气懊恼&#xff0…...

基于FPGA的图像二值化处理,包括tb测试文件和MATLAB辅助验证

1.算法运行效果图预览 将FPGA的数据导入到matlab进行显示 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps ............................................................................. module test_image;reg i_clk; reg i_rst; r…...

文件操作(个人学习笔记黑马学习)

C中对文件操作需要包含头文件<fstream > 文件类型分为两种: 1.文本文件&#xff1a;文件以文本的ASCII码形式存储在计算机中 2.二进制文件&#xff1a;文件以文本的二进制形式存储在计算机中&#xff0c;用户一般不能直接读懂它们 操作文件的三大类: 1.ofstream: 写操作 …...

Android Studio新版本New UI及相关设置丨遥遥领先版

1、前言 俗话说工欲善其事必先利其器嘛&#xff0c;工具用不好怎么行呢&#xff0c;借着Android Studio的更新&#xff0c;介绍一下新版本中的更新内容&#xff0c;以及日常开发中那些好用的设置。 2、关于新版本 2.1、最新正式版本 Android Studio Giraffe | 2022.3.1 Pat…...

新型人工智能技术让机器人的识别能力大幅提升

原创 | 文 BFT机器人 在德克萨斯大学达拉斯分校的智能机器人和视觉实验室里&#xff0c;一个机器人在桌子上移动一包黄油玩具。通过达拉斯分校计算机科学家团队开发的新系统&#xff0c;机器人每推动一次&#xff0c;就能学会识别物体。 新系统允许机器人多次推动物体&#xf…...

聚观早报|蚂蚁集团发布“蚁天鉴”;vivo X100系列即将亮相

【聚观365】9月12日消息 蚂蚁集团发布“蚁天鉴” vivo X100系列即将亮相 台积电8月份营收59亿美元 8月公共充电桩环比增加6.1万台 吴泳铭接替张勇出任阿里云代理董事长与CEO 蚂蚁集团发布“蚁天鉴” 蚂蚁集团发布大模型安全一体化解决方案“蚁天鉴”。该方案包含了大模型…...

读高性能MySQL(第4版)笔记05_优化服务器设置

1. 除非遇到异常情况&#xff0c;否则不需要调整配置 1.1. 不要“调优”服务器&#xff0c;不要使用比率、公式或“调优脚本”作为设置配置变量的基础 1.1.1. 在互联网上搜索配置建议并不总是一个好主意&#xff0c;你会在博客、论坛等找到很多糟糕的建议 1.1.2. 很难判断谁…...

Spring Boot跨域问题简介

什么是跨域问题&#xff1f; 在Web开发中&#xff0c;跨域指的是在浏览器中访问一个不同于当前域名的资源。浏览器出于安全考虑&#xff0c;限制了这种跨域资源的访问。具体来说&#xff0c;当浏览器使用XMLHttpRequest或Fetch API发送跨域请求时&#xff0c;目标服务器必须在…...

【Java】过滤器和拦截器区别

文章目录 前言1、过滤器 (Filter)2、拦截器 (Interceptor)3、我们不一样3.1、实现原理不同3.2、使用范围不同3.3、触发时机不同 4、拦截的请求范围不同5、注入Bean情况不同6、控制执行顺序不同总结 前言 准备环境 我们在项目中同时配置 拦截器 和 过滤器。 1、过滤器 (Filter…...

es滚动查询分析和使用步骤

ES在进行普通的查询时&#xff0c;默认只会查询出来10条数据。我们通过设置es中的size可以将最终的查询结果从10增加到10000。如果需要查询数据量大于es的翻页限制或者需要将es的数据进行导出又当如何&#xff1f; Elasticsearch提供了一种称为"滚动查询"&#xff08…...

飞书公式总结

文本处理函数 飞书中的表格&#xff0c;需要实现 内容内容1条件1内容2条件2内容3条件3今天是周一;可以出去玩今天是周一能今天天气不错不能可以出去玩能 条件1&#xff0c;2&#xff0c;3为能时&#xff0c;把对应的内容1&#xff0c;内容2&#xff0c;内容3复制到内容 TEX…...

vue3.2 导出pdf文件或表格数据

要在Vue 3中导出PDF文件&#xff0c;你可以使用第三方库来处理PDF生成和导出。一个常用的库是jspdf&#xff0c;它允许你在客户端或服务器端生成PDF文档。 以下是在Vue 3中使用jspdf库导出PDF文件的基本步骤&#xff1a; 第一步首先&#xff0c;安装jspdf库。你可以使用npm或ya…...

Linux学习--MySQL学习之查询语句

所有实现基于mysql8.0.26实现&#xff0c;事例代码 1&#xff1a;常用函数 字符函数数学函数日期函数聚集函数数学计算if函数case函数 函数&#xff1a;MySQL服务内置命令 语法&#xff1a;函数名(表头名) select格式 SELECT 函数(表头名) FROM 库名.表名&#xff1b; SE…...

三、视频设备的枚举以及插拔检测

一、前言 本章主要讲述&#xff0c;如何获取设备名称以及guid&#xff0c;采集设备的采集格式识别&#xff0c;设备的插拔 设备列表以及属性的获取使用的directshow(后续的MediaFoundation无法获取OBS摄像头) 设备的插拔使用的是QT 捕获系统消息&#xff0c;捕获到设备插拔后&a…...

Qt开发_调用OpenCV(4.x)完成人脸检测并绘制马赛克(摄像头实时数据)

一、前言 这个基于Qt和OpenCV的人脸检测和人脸打码项目是通过实时视频流中的人脸识别来保护隐私。 该项目目的是保护隐私并确保人脸数据安全。在某些情况下,使用实时视频流进行人脸检测和识别可能涉及对个人隐私的侵犯。通过在图像中打码人脸区域,可以避免未经许可的人脸出…...

ssl证书有效期为什么越来越短?

随着互联网的发展和网络安全意识的提升&#xff0c;SSL证书在保护网络通信安全方面起到了极为重要的作用。SSL证书通过加密通信数据&#xff0c;确保信息在传输过程中不被窃取或篡改&#xff0c;为用户提供了安全可靠的网络环境。然而&#xff0c;近年来SSL证书的有效期不断缩短…...

XFF漏洞利用([SWPUCTF 2021 新赛]Do_you_know_http)

原理 常见的存在HTTP头注入的参数 User-Agent&#xff1a;使得服务器能够识别客户使用的操作系统&#xff0c;浏览器版本等.&#xff08;很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中&#xff09; Cookie&#xff1a;网站为了辨别用户身份进行se…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...