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

赋值运算符重载和const成员函数和 const函数

文章目录

  • 1.运算符重载
    • (1)
    • (2)运算符重载的语法:
    • (3)运算符重载的注意事项:
    • (4)前置++和后置++重载区别
  • 2.const成员函数
  • 3.取地址及const取地址操作符重载
  • 4.总结

1.运算符重载

(1)

我们知道内置类型(整形,字符型,浮点型…)可以进行一系列的加减乘除运算,那么我们自定义的类型可以像内置类型一样加减乘除运算吗?那么我们来实践看看吧,毕竟是实践出真理嘛。

#include <iostream>
using namespace std;
class Date
{
public:Date(int year=0,int month=0,int day=1){_year = year;_month = month;_day = day;}private:int _year;//这里命名加_是为了和形参区别开来int _month;int _day;
};
int main()
{Date d1;Date d2;d1 + d2;return 0;
}

我们可以看看这个代码,看看d1+d2能否进行运算。
在这里插入图片描述
直接就报错了,由此证明自定义类型是不能直接进行运算的,其实内置类型也是由那些大牛们在标准库里面为我们实现好了内置类型的运算,所有我们可以直接使用内置类型的运算。那么我们该如何做才能让自定义类型像内置类型一样进行运算呢?其实我们可以用运算符重载就可以实现该功能。由此引出了运算符重载。

(2)运算符重载的语法:

返回类型+operator+需要重载的运算符的符号+(参数) 注意:一般运算符重载的参数是为一个
运算符重载的例子:

bool operator==(const Date& d2)
{return _year == d2._year&& _month == d2._month&& _day == d2._day;
}

在这里插入图片描述
在这里插入图片描述

(3)运算符重载的注意事项:

(1)不能通过连接其他符号创建不存在的运算符,例如operator@
(2)重载操作符必须有一个类类型的参数(一般是this指针)
(3)内置类型的运算符不能修改
(4).* :: sizeof ?: .这五个运算符不能进行重载
(5)赋值运算符重载也可能会出现浅拷贝问题(这个不理解可以去看看我上篇博客)

(4)前置++和后置++重载区别

#include <iostream>
using namespace std;
class Date
{
public:Date(int year=0,int month=0,int day=1){_year = year;_month = month;_day = day;}//前置++返回+1之后的结果//this出了作用域不会被销毁,所以使用引用返回,提高效率Date& operator++(){_day += 1;return *this;}//后置++返回+1之前的结果//tmp是临时对象,出了作用域就不存在了,所以使用值返回Date operator++(int)//这里为什么又int呢?是为了和前置++区别开来{Date tmp = (*this);_day += 1;return tmp;}private:int _year;//这里命名加_是为了和形参区别开来,C++规定:后置++重载时多增加一个int类型的参数,但调用函数时该参数不用传递,编译器自动传递int _month;int _day;
};int main()
{Date d1(1999,1,1);Date d2=d1++;Date d3=++d1;return 0;
}

在这里插入图片描述

2.const成员函数

(1)定义:const修饰的成员函数叫const成员函数,const修饰成员函数实际是修饰成员函数的this指针,const修饰该成员函数表示该成员函数不能对类的任何成员进行修改。
编译器对const成员的处理
在这里插入图片描述

3.取地址及const取地址操作符重载

这两个函数一般不用重新定义,编译器会默认生成

Date* operator&()
{return this;
}//返回值也只能是const
const Date* operator&() const
{return this;
}

4.总结

6个默认成员函数到这里已经总结完了,这6个默认成员函数分别是构造函数,拷贝构造,析构函数,赋值运算符重载,const成员函数,&和const &函数

相关文章:

赋值运算符重载和const成员函数和 const函数

文章目录 1.运算符重载(1)(2)运算符重载的语法&#xff1a;(3)运算符重载的注意事项&#xff1a;(4)前置和后置重载区别 2.const成员函数3.取地址及const取地址操作符重载4.总结 1.运算符重载 (1) 我们知道内置类型(整形&#xff0c;字符型&#xff0c;浮点型…)可以进行一系…...

VSCode设置字体大小

方法1&#xff1a;Ctrl 和 Ctrl -&#xff0c;可以控制整个VSCode界面的整体缩放&#xff0c;但是不会调整字体大小 方法2&#xff1a;该方法只能设置编辑器界面的字号&#xff0c;无法改变窗口界面的字号。 &#xff08;1&#xff09;点开左下角如下图标&#xff0c;进入…...

Excel中按列的首行字母顺序,重新排列(VBA脚本)

排序前 要求对4列数据按照第一行abcd的顺序排列 VB脚本如下&#xff1a; 要使用这个脚本&#xff0c;请按照以下步骤操作&#xff1a; 打开Excel&#xff0c;然后按下 Alt F11 打开VBA编辑器。在VBA编辑器中&#xff0c;选择“插入” > “模块”&#xff0c;在打开的模块…...

多线程爬虫技术详解

&#x1f380;引言❤❤ 在当今信息爆炸的时代&#xff0c;网络爬虫&#xff08;Web Crawler&#xff09;作为一种自动获取网页内容的程序&#xff0c;已经成为数据挖掘和信息检索不可或缺的工具。多线程爬虫作为提高爬虫效率的重要手段&#xff0c;通过并行处理技术大幅度提升…...

项目一单机安装基于LNMP结构的WordPress网站 web与数据库服务分离

网站的类型&#xff1a; Jave:LNMT PHP:LNMP Python: LNMU 项目部署&#xff1a; 1.项目的类型&#xff08;项目的开发语言&#xff09; 2.项目运营平台的技术选择 3.尽快让项目运行起来 all in one部署 4. 架构的优化 配置ansible管理环境 配置nginx 配置数据库服务…...

vue事件处理v-on或@

事件处理v-on或 我们可以使用v-on指令&#xff08;简写&#xff09;来监听DOM事件&#xff0c;并在事件触发时执行对应的Javascript。用法&#xff1a;v-on:click"methodName"或click"hander" 事件处理器的值可以是&#xff1a; 内敛事件处理器&#xff1…...

使用OpenCV与PySide(PyQt)的视觉检测小项目练习

OpenCV 提供了丰富的图像处理和计算机视觉功能&#xff0c;可以实现各种复杂的图像处理任务&#xff0c;如目标检测、人脸识别、图像分割等。 PyQt(或PySide)是一个创建GUI应用程序的工具包&#xff0c;它是Python编程语言和Qt库的成功融合。Qt库是最强大的GUI库之一。Qt的快速…...

通信协议_C#实现自定义ModbusRTU主站

背景知识&#xff1a;modbus协议介绍 相关工具 mbslave:充当从站。虚拟串口工具:虚拟出一对串口。VS2022。 实现过程以及Demo 打开虚拟串口工具: 打开mbslave: 此处从站连接COM1口。 Demo实现 创建DLL库&#xff0c;创建ModbusRTU类,进行实现&#xff1a; using Syste…...

【C语言】 —— 编译和链接

【C语言】 —— 编译和链接 一、编译环境和运行环境二、翻译环境2.1、 预处理2.2、 编译&#xff08;1&#xff09;词法分析&#xff08;2&#xff09;语法分析&#xff08;3&#xff09;语义分析 2.3、 汇编2.4、链接 三、运行环境 一、编译环境和运行环境 平时我们说写 C语言…...

DNS正向解析与反向解析实验

正向解析 安装bind软件 [rootlocalhost ~]# dnf install bind bind-utils -y修改主配置文件/etc/named.conf [rootlocalhost ~]# vim /etc/named.conf重启DNS服务&#xff08;named&#xff09; [rootlocalhost ~]# systemctl restart named编辑数据配置文件。在/var/named…...

机器学习简介--NLP(二)

机器学习简介 机器学习简介机器学习例子机器学习分类有监督学习有监督学习的应用 无监督学习 机器学习常见概念数据集k折交叉验证过拟合欠拟合评价指标 机器学习简介 机器学习例子 问题&#xff1a; 2&#xff0c;4&#xff0c;6&#xff0c;8&#xff0c;&#xff1f;&#…...

Winform中使用HttpClient实现调用http的post接口并设置传参content-type为application/json示例

场景 Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类&#xff1a; Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类_winform解析json-CSDN博客 上面使用HttpClient调用post接口时使用的HttpCon…...

【RAG探索第3讲】LlamaIndex的API调用与本地部署实战

原文链接&#xff1a;【RAG探索第3讲】LlamaIndex的API调用与本地部署实战 今天是2024年7月5日&#xff0c;星期五&#xff0c;天气晴&#xff0c;北京。 RAG的文章也看不少了&#xff0c;今天给大家带来一个llamaindex的实战。分为两个部分&#xff0c;调用ChatGLM的API来用l…...

C# —— 日期对象

DateTime 时间类 存储时间对象 可以获取当前时间 DateTime now DateTime.Now;// 获取当前时间 Console.WriteLine("年:" now.Year);//2023 Console.WriteLine("月:" now.Month);//9 Console.WriteLine("日:" now.Day);//12 Console.WriteLi…...

【MySQL04】【 redo 日志】

文章目录 一、前言二、redo 日志1. redo 日志格式2. Mini-Transaction2.1 以组的形式写入 redo 日志2.2 Mini-Transaction &#xff08;MTR&#xff09;概念 3. redo 日志写入过程3.1 redo 日志缓冲区3.3 redo 日志写入 log buffer 4. redo 日志文件4.1 redo 日志刷盘机制4.2 r…...

Android线性布局的概念与属性

线性布局(LinearLayout)是Android中最简单的布局方式&#xff0c;线性布局方式会使得所有在其内部的控件或子布局按一条水平或垂直的线排列。如图所示&#xff0c;图a是纵向线性布局示意图&#xff0c;图b是横向线性布局示意图。 a&#xff09;纵向线性布局示意图 …...

java反射介绍

Java反射API允许你在运行时检查和修改程序的行为。这意味着你可以动态地创建对象、查看类的字段、方法和构造函数&#xff0c;甚至调用它们。这是一个强大的特性&#xff0c;但也应该谨慎使用&#xff0c;因为它可以破坏封装性。 以下是使用Java反射的一些常见用途&#xff1a;…...

Spring中@Transactional的实现和原理

这篇文章写的很详细了&#xff0c;引自脚本之家 Java中SpringBoot的Transactional原理_java_脚本之家...

华为仓颉可以取代 Java 吗?

大家好&#xff0c;我是君哥。 在最近的华为开发者大会上&#xff0c;华为亮相了仓颉编程语言&#xff0c;这是华为历经 5 年&#xff0c;投入大量研发成本沉淀的一门编程语言。 1 仓颉简介 按照官方报告&#xff0c;仓颉编程语言是一款面向全场景智能的新一代编程语言&#…...

性能测试相关理解(一)

根据学习全栈测试博主的课程做的笔记 一、说明 若未特别说明&#xff0c;涉及术语都是jmeter来说&#xff0c;线程数&#xff0c;就是jmeter线程组中的线程数 二、软件性能是什么 1、用户关注&#xff1a;响应时间 2、业务/产品关注&#xff1a;响应时间、支持多少并发数、…...

零基础入门机器人抓取:在快马平台轻松搞定龙虾openclaw安装与第一个程序

最近在学习机器人抓取相关的知识&#xff0c;发现龙虾openclaw是个不错的入门工具。作为一个完全零基础的小白&#xff0c;我在安装和配置环境时遇到了不少困难。好在发现了InsCode(快马)平台&#xff0c;它帮我轻松解决了这些问题。下面分享一下我的学习过程。 了解openclaw …...

3种突破窗口限制的高效方案:WindowResizer让桌面管理更自由

3种突破窗口限制的高效方案&#xff1a;WindowResizer让桌面管理更自由 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 在数字化办公环境中&#xff0c;窗口尺寸管理直接影响工作效…...

3D Face HRN场景应用:为教育课件快速创建解剖学面部3D模型

3D Face HRN场景应用&#xff1a;为教育课件快速创建解剖学面部3D模型 1. 解剖学教学的数字化革命 传统解剖学教学面临一个根本性挑战&#xff1a;如何让学生直观理解面部复杂的三维结构&#xff1f;教科书上的平面插图无法展示肌肉层次&#xff0c;实体模型又昂贵且无法个性…...

Arduino红外遥控库:让硬件设备听懂遥控器的语言

Arduino红外遥控库&#xff1a;让硬件设备听懂遥控器的语言 【免费下载链接】Arduino-IRremote Infrared remote library for Arduino: send and receive infrared signals with multiple protocols 项目地址: https://gitcode.com/gh_mirrors/ar/Arduino-IRremote 你是…...

三步永久保存青春记忆:GetQzonehistory让QQ空间数据永不消逝

三步永久保存青春记忆&#xff1a;GetQzonehistory让QQ空间数据永不消逝 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心多年积累的QQ空间说说突然消失&#xff1f;那些承载…...

LFM2.5-1.2B-Thinking-GGUF基础教程:理解llama.cpp中n_ctx/n_batch/n_threads参数协同

LFM2.5-1.2B-Thinking-GGUF基础教程&#xff1a;理解llama.cpp中n_ctx/n_batch/n_threads参数协同 1. 模型与运行环境概述 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型&#xff0c;特别适合在资源有限的设备上快速部署。这个模型采用GGUF格式&#xff0c;…...

Dankoe新作《使命与收益》读书笔记10|自我变现:如何将自我发展转化为值得付费的价值

大多数创业者的剧本都写好了&#xff1a;找个“有前景”的利基市场&#xff0c;学技能、做调研、磨产品&#xff0c;最后硬着头皮销售。 听起来很合理&#xff0c;对吧&#xff1f;&#xff08;利基市场 Niche的音译大企业看不上、懒得做、吃不下的小众细分市场&#xff09; …...

WebPlotDigitizer:计算机视觉辅助的图表数据提取工具深度解析

WebPlotDigitizer&#xff1a;计算机视觉辅助的图表数据提取工具深度解析 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 在科研和数据…...

WeKnora知识库迁移方案:从其他系统平滑过渡

WeKnora知识库迁移方案&#xff1a;从其他系统平滑过渡 1. 引言 知识库迁移听起来可能很复杂&#xff0c;但其实就像搬家一样&#xff0c;只要提前规划好&#xff0c;整个过程可以很顺利。无论你之前用的是Confluence、MediaWiki还是其他知识管理系统&#xff0c;迁移到WeKno…...

个人电脑也能玩转大模型!Llama Factory+QLoRA微调实战,RTX4060即可运行

个人电脑也能玩转大模型&#xff01;Llama FactoryQLoRA微调实战&#xff0c;RTX4060即可运行 你是不是也以为&#xff0c;训练一个属于自己的大语言模型&#xff0c;是那些拥有昂贵服务器和顶级显卡的大公司才能做的事&#xff1f;动辄几十GB的显存需求&#xff0c;让很多个人…...