菏泽做网站设计/汕头网站建设方案优化
目录
1.赋值运算符重载
1.1运算符重载
1.2赋值运算符重载
1.2.1赋值运算符重载格式
1.2.2赋值运算符只能重载成成员函数不能重载成全局函数
1.2.3同拷贝函数一样,如果类是形如日期类这样变量全是内置类型的,赋值运算符就必须自己实现,用编译器默认生成的就行,但是如果涉及到资源管理就必须要自己实现赋值运算符。
1.3前置++和后置++重载
2.const成员函数
3.取地址及const取地址操作符重载
时光不语,我们都在努力
这里是来自M--Y的专栏:C++启航
以下内容均为个人见解,如有不足还请指出
期待大家的点赞、收藏、评论(互三必回)诸君共勉
类中的6个默认成员函数
1.赋值运算符重载
1.1运算符重载
运算符重载提高代码可读性。函数命名为关键字operator后面接需要重载的运算符符号
特别注意:
1.不能通过连接其他符号来创建新的操作符,如operator@
2.重载操作符必须有一个类类型参数
3.用于内置类型的运算符,其含义不能改变
4.作为类成员函数重载时,其形参看起来比操作数数目少1,这是因为成员函数的第一个参数是隐式的this
5..* :: sizeof ?; .这五个运算符不支持重载
class Date
{
public:
// ……
private:
int _year;
int _month;
int _day;
}
bool operator==(const Date& d1,const Date& d2)
{
//……
}
如果和上述代码一样定义成全局函数的话,就无法访问到Date类中的私有成员变量,如果要使代码编译通过的话,就必须将上述代码标红处给注释掉。
这样处理的话,显得过于麻烦,所以不如将函数封装成成员函数。
封装成成员函数的时候我们需要注意一点,上面注意4提到,成员函数的第一个参数是隐式的this所以在代码上要做些许调整。
class Date
{
public:
bool operator==(const Date& d)
{
return _year==d._year
&&_month=d._month
&&_day==d._month;
}
private:
int _year;
int _month;
int _day;
} ;
1.2赋值运算符重载
1.2.1赋值运算符重载格式
1.参数类型:const T&(传递引用可以提高传参效率)
2.返回值类型:T&。返回引用可以提高效率,同时在有些情况下可以支持连续赋值
3.检测是否自己给自己赋值
4.返回*this。目的:连续赋值,下文会细讲
1.2.2赋值运算符只能重载成成员函数不能重载成全局函数
原因:如果用户将赋值运算符实现成全局的话,编译器就会自己生成一个默认的成员函数,这样两者就会产生冲突了
class Date
{
public:
//……
Date& operator=(const Date&d)
{
_year=d._year;
_month=d._month;
_day=d._day;
return *this;
}
};
1.2.3同拷贝函数一样,如果类是形如日期类这样变量全是内置类型的,赋值运算符就必须自己实现,用编译器默认生成的就行,但是如果涉及到资源管理就必须要自己实现赋值运算符。
1.3前置++和后置++重载
思考:由上面叙述可以联想到关于++的运算符重载的函数名应该是operator++,但是这样的话如何区分前置++和后置++呢?
为了区分,C++特别规定:后置++重载时多加一个int类型的参数,但是调用时不用传参,编译器会自动传递。
//前置++
Date& operator++()
{
_day++;
_month++;
_year++;
if(_day>GetMonthday())//实现输出某年某月的天数
{
_day-=GetMonthday();
_month++
}
if(_month>=13)
{
_month-=12;
_year++;
}
return *this;
}
后置++
//注意后置++是先是有后+1,因此需要一个临时变量来保存原来的值,所以函数的返回值应该是Date而不是Date&
Date operator++(int)
{
Date temp=*this;
//重复上述前置++步骤
return temp;
}
其实关于运算符的重载有很多+=,-=,+,-,>,<,>=,<=。但是如果每个运算符都按上述方式代码就会显得十分冗长。有没有什么办法呢? 答案是肯定的。
Date& Date:: operator+=(int day)//日期+天数=日期
{
_day += day;while (_day > GetMonthDay(_year, _month))
{
_day -= GetMonthDay(_year, _month);
_month++;
if (_month == 13)
{
_year++;
_month = 1;
}
}while (_day < 0)
{
_month--;
if (_month == 0)
{
_year--;
_month = 12;
}
_day += GetMonthDay(_year, _month);
}return *this;
}
以上上+=为例,当我们实现一个运算符重载后,和它相关的运算符重载就会变得很简单实现,只需要进行复用就行 。
Date& operator-=(int day)//日期-天数=日期
{
return *this+=-day
}
Date& operator++()
{
return *this+=1;
}
Date operator++(int)
{
Date temp=*this;
*this+=1;
return temp;
}
其他的运算符重载也和这类似,感兴趣的可以自己去尝试实现。
2.const成员函数
用cosnt修饰的成员函数被称为const函数,实际上const修饰的是成员函数中的this,但是一般const修饰变量会加在其前面,而this是隐式的,如何表示修饰的是this呢?
C++规定将cosnt+在函数后面,就表示对this的修饰。
Date operator+(int day) const
{
//……
}
3.取地址及const取地址操作符重载
这两个函数一般不用重新定义,不是特殊情况,编译器会自动生成的够用。
Date* operator&()
{
return this;
}
const Date* operator&() const
{
return this;
}
相关文章:

C++类与对象(中)②
目录 1.赋值运算符重载 1.1运算符重载 1.2赋值运算符重载 1.2.1赋值运算符重载格式 1.2.2赋值运算符只能重载成成员函数不能重载成全局函数 1.2.3同拷贝函数一样,如果类是形如日期类这样变量全是内置类型的,赋值运算符就必须自己实现,…...

Qt——xml文件生成DBus接口
1. 如何根据xml文件生成Dbus接口 要使用 XML 文件生成 D-Bus 接口,你可以按照以下步骤操作: 步骤 1: 准备 XML 文件 确保你的 XML 文件遵循 D-Bus 的接口描述规范。这通常包括定义接口、方法、信号和属性。一个基本的例子如下: <!DOCTYPE…...

初识SpringMVC(SpringMVC学习笔记一)
1 、还是熟悉的配方,先创建一个父Maven项目(忘记怎么创建项目了就去前面翻笔记),导入通用的配置依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…...

FreeRTOS任务管理
1. 任务状态理论讲解 定时器职中断周期此处的1000Hz表示的是没次间隔1毫秒就记一次数(在FreeConfig.h)文件中进行配置 #define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) 判断是否需要任务切换在FreeRTOS里面每次间隔1毫秒切换一次(程序…...

Qwen1.5大语言模型微调实践
在人工智能领域,大语言模型(Large Language Model,LLM)的兴起和广泛应用,为自然语言处理(NLP)带来了前所未有的变革。Qwen1.5大语言模型作为其中的佼佼者,不仅拥有强大的语言生成和理…...

购物车实现
目录 1.购物车常见的实现方式 2.购物车数据结构介绍 3.实例分析 1.controller层 2.service层 1.购物车常见的实现方式 方式一:存储到数据库 性能存在瓶颈方式二:前端本地存储 localstorage在浏览器中存储 key/value 对,没有过期时间。s…...

HTML5漫画风格个人介绍源码
源码介绍 HTML5漫画风格个人介绍源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 效果截图 源码下载 HTML5漫画风格…...

工业数学模型——高炉煤气发生量预测(三)
1、工业场景 冶金过程中生产的各种煤气,例如高炉煤气、焦炉煤气、转炉煤气等。作为重要的副产品和二次能源,保证它们的梯级利用和减少放散是煤气能源平衡调控的一项紧迫任务,准确的预测煤气的发生量是实现煤气系统在线最优调控的前提。 2、…...

pnpm - Failed to resolve loader: cache-loader. You may need to install it.
起因 工作原因需要研究 vue-grid-layout 的源码,于是下载到本地。因为我习惯使用 pnpm,所以直接用 pnpm i 安装依赖,npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock,于是重新用 yarn install 安装依赖&…...

CSS transition和animation的用法和区别
Transition和Animation在CSS中都是用于实现元素状态变化的效果,但它们在用法和特性上存在明显的区别。 Transition transition是过度属性,主要强调的是元素状态的过渡效果。 它通常用于在元素的状态发生变化时,平滑地过渡到一个新的状态。…...

书籍推荐(附上每本书的看点)
1、《FPGA深度解析》,这本书的FIFO部分我觉得讲得很好; 2、《verilog数字系统设计教程》,夏宇闻老师的蓝皮书,这本书里包含很多考试知识点; 3、《SOC设计方法和实现》郭炜老师写的,我觉得他的低功耗设计讲得很好; 《高级FPGA设计结…...

LLM理解v1
答疑 什么是知识库? LLM(Large Language Models,大型语言模型)如GPT系列,通常是基于海量的文本数据进行训练的。它们通过分析和理解这些数据来生成回答、撰写文章、解决问题等。当我们提到LLM的“本地知识库”时&…...

ubuntu 22.04 -- cmake安装
安装方式一:源码安装 1、下载安装包 官网下载:下载链接:Download CMake 也可以使用命令行下载 wget https://github.com/Kitware/CMake/releases/download/v3.26.5/cmake-3.26.5.tar.gz2、解压并安装 # 1、解压 tar -zxvf cmake-3.26.5.…...

字符串算法题(第二十四天)
344. 反转字符串 题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入࿱…...

【Linux】应用层协议序列化和反序列化
欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:C【智能指针】 前言 在正式代码开始前,会有一些前提知识引入 目录 👉🏻序列…...

使用Canal同步MySQL 8到ES中小白配置教程
🚀 使用Canal同步MySQL 8到ES中小白配置教程 🚀 文章目录 🚀 使用Canal同步MySQL 8到ES中小白配置教程 🚀**摘要****引言****正文**📘 第1章:初识Canal1.1 Canal概述1.2 工作原理解析 📘 第2章&…...

关于部署ELK和EFLK的相关知识
文章目录 一、ELK日志分析系统1、ELK简介1.2 ElasticSearch1.3 Logstash1.4 Kibana(展示数据可视化界面)1.5 Filebeat 2、使用ELK的原因3、完整日志系统的基本特征4、ELK的工作原理 二、部署ELK日志分析系统1、服务器配置2、关闭防火墙3、ELK ElasticSea…...

实验室信息系统源码 saas模式java+.Net Core版开发的云LIS系统全套源码可二次开发有演示
实验室信息系统源码 saas模式java.Net Core版开发的云LIS系统全套源码可二次开发有演示 一、技术框架 技术架构:Asp.NET CORE 3.1 MVC SQLserver Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架&am…...

PCB---Design Entry cis 绘图 导出
修改纸张大小: 画图前准备:导入 画图: 习惯: 电源朝上 地朝下 配置pbc_footprint编号: 都配置好编号就可以导出了 导出:...

vue 一键更换主题颜色
这里提供简单的实现步骤,具体看自己怎么加到项目中 我展示的是vue2 vue3同理 在 App.vue 添加 入口处直接修改 #app { // 定义的全局修改颜色变量--themeColor:#008cff; } // 组件某些背景颜色需要跟着一起改变,其他也是同理 /deep/ .ant-btn-primar…...

WebKit内核游览器
WebKit内核游览器 基础概念游览器引擎Chromium 浏览器架构Webkit 资源加载这里就不得不提到http超文本传输协议这个概念了: 游览器多线程HTML 解析总结 基础概念 百度百科介绍 WebKit 是一个开源的浏览器引擎,与之相对应的引擎有Gecko(Mozil…...

Qt 拖放功能详解:理论与实践并举的深度指南
拖放(Drag and Drop)作为一种直观且高效的用户交互方式,在现代图形用户界面中扮演着重要角色。Qt 框架提供了完善的拖放支持,允许开发者在应用程序中轻松实现这一功能。本篇博文将详细阐述Qt拖放机制的工作原理,结合详…...

Springboot+Vue项目-基于Java+MySQL的企业客户管理系统(附源码+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...

【Linux学习】Linux指令(四)
文章标题 🚀zip/unzip指令:🚀tar指令(重要):🚀uname –r指令:🚀关机指令🚀几个常用操作 🚀zip/unzip指令: zip 与 unzip的安装 yum i…...

阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期
前言 Certbot是一款免费且开源的自动化安全证书管理工具,由电子前沿基金会(EFF)开发和维护,是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。 一、 安装软件 1.1…...

统一SQL-number/decimal/dec/numeric转换
统一SQL介绍 https://www.light-pg.com/docs/LTSQL/current/index.html 源和目标 源数据库:Oracle 目标数据库:Postgresql,TDSQL-MySQL,达梦8,LightDB-Oracle 操作目标 通过统一SQL,将Oracle中的numb…...

软件测试入门学习笔记
系统测试流程规范 一.研发模型 1.瀑布模型 从可行性研究(或系统分析)开始,需求 2.增量迭代模型 3.敏捷开发模型 二.质量模型...

31. 下一个排列
题目描述 整数数组的一个排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的下一个排列是指其整数的下一个字典序更大的排列。更正式地&…...

Android笔记: mkdirs不生效失败
Manifest已经配置权限,代码中也动态获取权限,mkdirs一直返回false File.mkdirs()方法创建文件夹失败 1、动态申请读写权限 <!--SDCard写权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--SDCard读权…...

需要添加的硬币的最小数量(Lc2952)——贪心+构造
给你一个下标从 0 开始的整数数组 coins,表示可用的硬币的面值,以及一个整数 target 。 如果存在某个 coins 的子序列总和为 x,那么整数 x 就是一个 可取得的金额 。 返回需要添加到数组中的 任意面值 硬币的 最小数量 ,使范围 …...