【C++】赋值运算符重载

在这里插入图片描述

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

文章目录

  • 前言:
  • 一、赋值运算符重载的定义
  • 二、赋值运算符重载的使用
  • 三、使用细节
  • 四、运算符重载的参数问题

前言:

C++为了增强代码的可读性引入了运算符重载。运算符重载是具有特殊函数名的函数,其目的就是让自定义类型可以像内置类型一样可以直接使用运算符进行操作。运算符重载,就是对已有的运算符赋予多重含义,使同一运算符作用于不同类型的数据时产生不同的行为。运算符重载的目的是使得 C++ 中的运算符也能够用来操作对象。

例如:两个日期的比较,肯定不能单纯的使用==去比较,==只能运算两个标准类型的值。所以这时我们可以写一个函数来实现日期的比较。并使用运算符重载的方式给这个函数,名命名为‘-’.这样我们就可以使用 ==实现像是标准类型那般使用。

一、赋值运算符重载的定义

函数名字:关键字operator后面接需要重载的运算符符号
函数格式:

<返回类型说明符> operator <运算符符号>(参数列表)
{函数体
}

二、赋值运算符重载的使用

如下,比较两个日期函数。

#include<iostream>
using namespace std;class Date
{
public:Date(int year = 0, int month = 1, int day = 1){_year = year;_month = month;_day = day;}
public:
//private:int _year;int _month;int _day;
};bool operator==(const Date& x1,const Date& x2){return x1._year == x2._year&& x1._month == x2._month&& x1._day == x2._day;}
int main()
{//创建两个对象,并赋初始值Date d1(1919, 9,9);Date d2(1919,9,9);if (d1 == d2) {cout << "true" << endl;}else {cout << "false" << endl;}return 0;
}

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

注意点:

  • 由于是自定义类型传参,我们若是使用传值传参,会额外调用一次拷贝构造函数,所以函数的参数最好使用引用传参
  • 上述代码中类的成员变量访问限定符是public。否则下面的函数无法访问到。可以使用友元函数就可以访问到函类中的private型变量了。
  • 对于参数,在函数体内不会对其进行修改,所以最好加上const进行修饰。
  • bool operator==(const Date& x1,const Date& x2)定义在类外,是全局函数,参数中不存在this指针。

三、使用细节

  • 不能通过连接其他符号来创建新的操作符:比如operator@,只能是运算符
  • 重载操作符必须有一个类类型参数。
  • 用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义
  • 作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐
    藏的this
  • .* :: sizeof ?: . 注意以上5个运算符不能重载。

四、运算符重载的参数问题

1.重载操作符必须有一个类类型参数。
2.函数如果在类中,那么它的参数中才有会有隐藏的this指针(它会抢占最左边位置)。但是,函数如果定义在类外,就成一个全局函数,就没有this指针了。
3.一般的运算符写成成员函数。但是流运算符函数要写在类外,在类中有声明,这样就要自己给参数,没有this指针,就可以写成cou<<d1;在传参时,有一个默认的隐藏的this指针参数。会影响顺序。
例如:
下面的代码是写在类外的,所以两个参数都是自己手动传的。

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

将代码写进类中。

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

参数传入
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPIO的使用--存储系统与位带操作理解

目录 存储系统与位带操作 1、对GPIO的操作函数 2、计算机对地址的管理 3、板子地址 4、什么是位带操作 5、位带地址好处 存储系统与位带操作 1、对GPIO的操作函数 //方案一 GPIO_WriteBit(GPIOF,GPIO_Pin_9,0);//方案二 GPIO_Write(GPIOF,0x0000);//方案三 GPIOF->O…

开放式耳机怎么选?干货分享! 2023好评度超高开放式耳机推荐!

在现代社会中&#xff0c;人们对于音乐和通话的需求越来越高。传统的耳机虽然能够提供良好的音质&#xff0c;但使用过程中存在一些问题&#xff0c;例如长时间佩戴会引起耳朵疲劳和隔绝周围环境的声音。为了解决这些问题&#xff0c;开放式耳机应运而生&#xff0c;成为了一种…

【springboot原理篇】Bean的加载方式,面试必看

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、上古时代原始方式&#xff1a; &#x1f4d5;XML文件 ~~bean定义 &#x1f440;演示获取bean&#xff1a; ❌缺点&#xff1a; &#x1f4d5;注解方式&#xff1a; ~~component ~~指定扫描路径&#…

vm net 方式 静态ip配置访问主机IP和外网

1、win 11 安装vm&#xff0c;镜像文件 F:\software\VMwork\CentOS-7-x86_64-Everything-1804.iso 2、配置网络 net 方式 3、右击网络--》属性---》更改适配器设置--》vmnet8 属性 如果没有vm1、vm8 虚拟机编辑---》虚拟机网络编辑器-->还原默认设置 注意&#xff1a;这…

接口验签规则

一、验签的背景 在网络发展快速的过程中&#xff0c;总是会忽略接口数据安全问题&#xff0c;进行验签则能够在一定程度上能够防刷&#xff0c;数据篡改。 二、什么是加签验签 加签验签&#xff0c; 发送消息方&#xff0c;对消息加签名&#xff1b; 接受消息方&#xff0…

使用Notepad++编辑器,安装AnalysePlugin搜索插件

概述 是一款非常有特色的编辑器&#xff0c;Notepad是开源软件&#xff0c;Notepad中文版可以免费使用。 操作步骤&#xff1a; 1、在工具栏 ->“插件”选项。 2、勾选AnalysePlugin选项&#xff0c;点击右上角“安装”即可。 3、 确认安装插件 4、下载插件 5、插件已安装…

Java 设计模式——备忘录模式

目录 1.概述2.结构3.案例实现3.1.“白箱”备忘录模式3.2.”黑箱”备忘录模式 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;备忘录模式 (Memento Pattern) 又称为快照模式&#xff0c;是一种行为型设计模式&#xff0c;它提供了一种保存和恢复对象状态的机制。备忘录模…

涓流充电计时电路芯片D1302,具有双管脚主电源和备用电源,可编程涓流充 电器VCC1,还有 31 字节的暂存器等功能

D1302 涓流充电计时电路包含一个实时时钟 / 日历和 31 字节的静 态RAM &#xff0c;通过简单的串行接口与微处理器通讯。这个实时时钟 / 日历 提供年月日、时分秒信息&#xff0c;对于少于31 天的月份月末会自动调整&#xff0c; 还有闰年校正。由于有一个 AM/PM 指示器&a…

天翼云:“百万IOPS”助推政企上云

随着数字化转型的加速&#xff0c;越来越多的企业选择了业务上云。众所周知&#xff0c;不论是政企关键/核心业务中的大型数据库、NoSQL、AI训练&#xff0c;还是互联网业务中的游戏、渲染等场景&#xff0c;对数据读写IOPS和时延有极高的要求。作为全球领先的云服务商&#xf…

分享77个菜单导航JS特效,总有一款适合您

分享77个菜单导航JS特效&#xff0c;总有一款适合您 77个菜单导航JS特效下载 链接&#xff1a;https://pan.baidu.com/s/1sfT9ONLH4ocliA1C7Z5xbQ?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0…

75Ω视频放大驱动芯片 D1671,2.8~5.5V 内 置 SAG端 子 6dB放 大 器 电 路,应用于手持设备中

D1671 是 一 块 带 4 级 低 通 滤 波 的 单 通 道 视 频 放 大 电 路 &#xff0c; 可 在 3V 或 5V的 低 电 压 下 工 作 。 该 电 路 用 在 有 TV 影 象 输 出 功 能 的 产 品 上 面 &#xff0c; 比 如 机 顶 盒 &#xff0c;监 控 摄 象 头 &#xff0c;DVD &#xf…

骨传导耳机音量大了有害吗?骨传导能保护听力吗?

无论是传统耳机还是骨传导耳机&#xff0c;只要使用音量过大&#xff0c;都会对有一定的损伤&#xff0c;然而由于骨传导耳机的传声原理和佩戴方式比较特殊&#xff0c;所以对人体的损伤比较小&#xff0c;想要知道骨传导耳机能否保护听力&#xff0c;就要先了解骨传导耳机的传…

【Axure教程】用中继器制作多选树

“多选树”可能指的是一种用户界面元素&#xff0c;用于展示层级结构并允许用户选择多个节点。这在软件应用程序中常用于设置、文件浏览器等场景。 Axure里面虽然自带了一个树元件&#xff0c;但是并没有多选的功能&#xff0c;所以今天就教大家如何用中继器制作一个多选树的基…

acwing-Linux学习笔记

acwing-Linux课上的笔记 acwing-Linux网址 文章目录 1.1常用文件管理命令homework作业测评命令 2.1 简单的介绍tmux与vimvimhomeworktmux教程vim教程homework中的一些操作 3 shell语法概论注释变量默认变量数组expr命令read命令echo命令printf命令test命令与判断符号[]逻辑运算…

Vue3集成ThreeJS实现3D效果,threejs+Vite+Vue3+TypeScript 实战课程【一篇文章精通系列】

Vue3集成ThreeJS实现3D效果&#xff0c;threejsViteVue3TypeScript 实战课程【一篇文章精通系列】 项目简介一、项目初始化1、添加一些依赖项 二、创建3D【基础搭建】1、绘制板子&#xff0c;立方体&#xff0c;球体2、材质和光照3、材质和光照和动画4、性能监控5、交互控制6、…

【有机化学(药学类)】醛和酮3

第一题 思考 格氏试剂与不饱和醛酮的亲核加成反应&#xff0c;主要发生1,2加成&#xff08;注意&#xff1a;氧原子算是1&#xff09; 第二题 思考 叶立德反应&#xff0c;看到磷原子就应该想到这个&#xff01; 第三题 思考 涉及到两个反应&#xff1a; 亲核加成反应&…

5. Jetson Orin Nano CUDA 配置

5. Jetson Orin Nano CUDA 配置 1&#xff1a;安装Jtop jtop安装主要有以下三个步骤&#xff1a; 安装pip3 我们需要使用pip3来安装jtop&#xff0c;所以先安装pip3 sudo apt install python3-pip安装jtop sudo -H pip3 install -U jetson-stats运行jtop服务 sudo -H pip3 in…

SAAS版专业级条码标签打印软件解决方案

一。新一代互联网打印模式 saas云标签打印软件支持条码、二维码、表格等模式组合打印&#xff0c;支持批量打印标签、表格模拟数据 、在线预览二维码打印 、在线条码生成打印标签 ● 条码/二维码/标签打印&#xff0c;支持表格批量打印标签&#xff1b; ● 条码/二维码尺寸…

每天一点python——day85

#每天一点Python——85 #python常见的异常类型&#xff1a; #如图&#xff1a; #①数学运算异常【由于会报错&#xff0c;我直接全部注释掉了】 print(10/0) 输出&#xff1a;ZeroDivisionError: division by zero#②索引错误list1[1,2,3,4] print(list1[5])#找索引为4的元素 输…

CUDA简介——同步

1. 引言 前序博客&#xff1a; CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化CUDA简介——Grid和Block内Thread索引CUDA简介——CUDA内存模式 本文重点关注Thread同步和Barriers。 Threads并行执行&#xff0c;可能存在如下问题&#xff1a; 1&#…