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

news2024/11/19 3:42:11

在这里插入图片描述

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹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.coloradmin.cn/o/1283164.html

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

相关文章

“学习强国”学习达人挑战赛流程

“学习强国”学习达人挑战赛通过赛易知识竞赛云平台完成&#xff0c;完整竞赛流程和规则如下&#xff1a; 比赛形式&#xff1a;“学习强国”学习平台首届达人挑战赛决赛为电视知识竞赛&#xff0c;前期需录入100名选手个人信息与各环节竞赛题库。 比赛载体&#xff1a;手机在…

龙迅#LT6911GX是一款高性能HDMI2.1至MIPI或LVDS芯片,支持图像处理,DSC压缩和嵌入式LPDDR4 旋转功能!

1.描述 应用功能&#xff1a;LT6711GX适用于HDMI2.1转MIPICSI/DSI&#xff1b;HDMI2.1转LVDS&#xff0c;支持高刷模式&#xff0c;带HDCP 方案&#xff01; 分辨率&#xff1a;最高支持8K30HZ 工作温度范围&#xff1a;−40C to 85C 产品封装&#xff1a;BGA169&#xff08;9*…

RabbitMQ 的七种消息传递形式

文章目录 一、RabbitMQ 架构简介二、准备工作 三、消息收发1. Hello World2. Work queues3. Publish/Subscrite3.1. Direct3.2. Fanout3.3. Topic3.4. Header 4. Routing5. Topics 大部分情况下&#xff0c;我们可能都是在 Spring Boot 或者 Spring Cloud 环境下使用 RabbitMQ&…

【powerjob】定时任务调度器 xxl-job和powerjob对比

文章目录 同类产品对比资源及部署相关资源占用对比&#xff1a;部署方式&#xff1a;xxl job :调度器&#xff1a;执行器&#xff1a; powerjob&#xff1a;调度器&#xff1a;执行器&#xff1a; 总结 背景&#xff1a; 目前系统的定时任务主要通过Spring框架自带的Scheduled注…

SpringBoot:SpringMVC(上)

文章目录 前言一、SpringMVC是什么&#xff1f;1.1 MVC的定义&#xff1a;1.2 MVC 和 Spring MVC 的关系 二、Spring MVC 创建和连接2.1创建springmvc2.2接下来&#xff0c;创建⼀个 UserController 类&#xff0c;实现⽤户到 Spring 程序的互联互通&#xff0c;具体实现代码如…

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

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

数据库系统原理与实践 笔记 #11

文章目录 数据库系统原理与实践 笔记 #11事务管理和并发控制与恢复事务概念转账的例子 事务ACID特性ACID特性事务原子性和持久性事务隔离性调度SQL中的事务定义 可串行化事务的简化视图冲突的指令冲突可串行化 可恢复性级联回滚无级联调度 数据库系统原理与实践 笔记 #11 事务…

Python中format函数用法

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 format优点 format是python2.6新增的一个格式化字符串的方法&#xff0c;相对于老版的%格式方法&#xff0c;它有很多优点。 1.不需要理会数据类型的问题&#…

pip的基本命令和使用

pip 简介 pip是Python官方的包管理器&#xff0c;可以方便地安装、升级和卸载Python包。 pip 常用命令 显示版本和路径 pip --version获取帮助 pip --help升级pip和升级包 pip install --upgrade pip # Linux/macOS pip install -U pip # windowspip install…

CVE-2016-2510CVE-2017-5586 BeanShell漏洞

前言&#xff1a; 首先我们需要了解BeanShell具体是做什么&#xff1a; BeanShell 是一种轻量级的可嵌入式脚本语言&#xff0c;用于在 Java 环境中执行脚本代码。它提供了一种简单、灵活的方式来扩展和定制 Java 应用程序的行为&#xff0c;允许开发人员动态地执行和评估脚本…

顺序查找、折半查找、分块查找

概念 查找表&#xff0c;分为静态查找表和动态查找表。 顺序查找 效率分析&#xff1a; 优化 折半查找 折半查找&#xff0c;又称“二分查找”仅适用于有序的顺序表。 ⭐&#xff0c;因为顺序表可以随机访问&#xff0c;链表不可以 效率分析 折半查找判定树的构造 如果&…

食品加工厂污水处理设备有哪些

食品加工厂污水处理设备是确保食品生产过程中污水能够得到有效处理和排放的重要设备。目前&#xff0c;针对食品加工厂污水处理的设备包括以下几个主要分类&#xff1a; 1. 预处理设备&#xff1a;包括格栅、沉砂池和沉淀池等。格栅主要用于去除污水中的大颗粒固体物质&#x…

Ubuntu20.04安装向日葵、开机自启、解决windows系统远程黑屏(笔记)

这里写目录标题 动机1. Ubuntu20.04 安装向日葵2. 设置开机自启3. 解决windows不可远程的问题4. 大公告成 动机 办公室有个工作站&#xff0c;要比我的笔记本的CPU稍微好一点&#xff0c;用来跑陆面过程。我信心满满的装了个Ubuntu20.04双系统,但是发现向日葵安装不上了。我少…

一.线性表

一.单链表 1.定义结构体 1.1不带头结点的结构体 typedef struct node{int data;struct node *next;//struct node *prior;//双向链表需要加上指针prior }Lnode,*Linklist; 1.2带头结点的结构体 typedef struct node{int data;struct node * next; }Node;typedef struct l…

一个可用于临床的食管癌远处转移预测模型(shiny APP)

一个可用于临床的食管癌远处转移预测模型&#xff08;APP&#xff09; 最近将之前构建的一个预测食管癌远处转移模型制作成了APP&#xff08;地址见文末&#xff09;&#xff0c;有一些思考&#xff0c;和大家分享如下&#xff1a; 1. 充分的说明 首先&#xff0c;对模型的…

面试题:为什么数据库连接池不采用 IO 多路复用?

今天我们聊一个不常见的 Java 面试题&#xff1a;为什么数据库连接池不采用 IO 多路复用&#xff1f; 这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用 DB 时&#xff0c;还是经常性采用c3p0&#xff0c;tomcat connection pool等技术来与 D…

软件验收计划书

软件项目验收计划的作用主要有以下几点&#xff1a; 确保项目质量&#xff1a;通过项目验收&#xff0c;客户或相关方可以对项目的成果进行全面、系统的评估&#xff0c;以确保项目达到预期的质量标准。 发现和解决问题&#xff1a;在项目开发过程中&#xff0c;难免会存在一些…

软著项目推荐 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习

文章目录 0 简介1 课题背景&#x1f6a9; 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率&#xff08;Accuracy&#xff09;3.2 精确率(Precision)和召回率(Recall)3.3 平均精…

Ant Design Pro初始化报错

今天按照官网步骤初始化项目&#xff0c;第一次报错 fatal: unable to access https://github.com/ant-design/ant-design-pro/: SSL certificate problem: unable to get local issuer certificate 致命&#xff1a;无法访问https://github.com/ant-design/ant-design-pro/&…

深入解析Linux内核网络-拥塞控制系列(一)

谈起网络拥塞控制&#xff0c;大家可能很熟悉八股文中的"加法增大“、”乘法减小“、”慢开始“、“拥塞避免”、“快重传”、“快恢复”等概念。没错&#xff0c;这是一种经典网络拥塞控制算法的基础理论&#xff0c;但在实际的实现时不同的拥塞控制算法&#xff0c;有很…