赋值运算符重载和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 &函数

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

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

相关文章

2024-07-05 base SAS programming学习笔记9(variables)

1.在数据集增加累加变量值&#xff08;SUM&#xff09; 求和语句(SUM STATEMENT)&#xff1a;variableexpression variable是累积求和的变量名&#xff0c;为数值型&#xff0c;默认初始值为0&#xff1b;该variable值则会保留到一个观测 当expression有缺失值&#xff0c;在求…

[Vite]Vite-legacy插件原理了解

[Vite]Vite-legacy插件原理了解 作用 检测旧浏览器&#xff1a;插件需要能够检测到用户的浏览器是否需要转换代码。这通常是通过用户代理字符串来实现的。代码转换&#xff1a;对于需要支持的旧浏览器&#xff0c;插件会使用Babel等工具将ES6代码转换为ES5代码。Polyfills注入…

android进程调度,线程调度的使用总结

关于android进程调度&#xff0c;线程调度的使用总结 一 java层的调用流程 上层关于调度主要用到的接口(ams,pms,SchedulingPolicyService等)&#xff1a; setThreadScheduler setThreadGroupAndCpuset setThreadGroup setProcessGroup setProcessFrozen 调用到native对应的实…

【项目管理】常见的敏捷实践:Scrum框架

【项目管理】常见的敏捷实践&#xff1a;Scrum框架 精益、敏捷与Scrum框架Scrum框架实践Sprint&#xff08;冲刺&#xff09;Scrum角色Scrum工件Scrum会议 精益、敏捷与Scrum框架 敏捷与精益思想、看板、Scrum等概念的关系如下图所示&#xff1a; Lean 精益 Kanban 看板 Ag…

文件存储的方法一

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了"如何实现本地存储"相关的内容&#xff0c;本章回中将介绍如何实现文件存储.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在上一章回中介绍的本地存储只能存储dart语言中基本类型的数值…

机器学习训练之使用静态图加速

前言 MindSpore有两种运行模式&#xff1a;动态图模式和静态图模式。默认情况下是动态图模式&#xff0c;也可以手工切换为静态图模式。 动态图模式 动态图的特点是计算图的构建和计算同时发生&#xff0c;符合Python的解释执行方式。在调试模型时较为方便&#xff0c;能够实…

开发者评测|操作系统智能助手OS Copilot

操作系统智能助手OS Copilot 文章目录 操作系统智能助手OS CopilotOS Copilot 是什么优势功能 操作步骤创建实验重置密码创建Access Key配置安全组安装 os-copilot环境变量配置功能评测命令行模式多轮交互模式 OS Copilot 产品体验评测反馈OS Copilot 产品功能评测反馈 参考文档…

做测试/爬虫 selenium 元素定位 谷歌浏览器 插件推荐,提高元素定位效率

注:插件均在谷歌应用商店 下载 1.XPath Helper 插件 作用&#xff1a;用于Html中对目标字段或者属性值进行匹配 快捷启动&#xff1a;ctrl shift x 示例图如下&#xff1a; 2. ChroPath 插件 作用&#xff1a; 提高元素定位效率 启动&#xff1a;谷歌浏览器 按 F12 -&g…

【电商系统开发实用接口指南】包含国内国外多电商平台商品数据对接(附文档)

关于电商数据接口 开发电商系统的朋友对于电商平台API肯定不陌生&#xff0c;API接口即应用程序编程接口&#xff0c;电商平台开放部分API接口&#xff0c;供商家和服务商调用&#xff0c;以满足电商业务管理需求。随着电商市场需求的日益增长以及技术手段的不断成熟&#xf…

【C++第十课 - stack_queue】stack、queue的使用、适配器模型stack、queue和priority_queue的底层实现、deque

目录 一、stack使用1、push2、pop3、empty4、top题目1、最小栈2、栈的压入、弹出序3、逆波兰表达式求值 二、queue的使用priority_queue习题 三、适配器stack的底层实现queue的底层实现priority_queue的底层实现仿函数/函数对象函数指针 四、deque 一、stack使用 stack是个容器…

聚焦大模型应用落地,2024全球数字经济大会人工智能专题论坛在京举办

7月1日下午&#xff0c;2024全球数字经济大会人工智能专题论坛在中关村国家自主创新示范区会议中心举办。论坛紧扣大模型应用落地这一热点&#xff0c;以“应用即未来——大模型赋能千行百业&#xff0c;新生态拥抱产业未来”为主题&#xff0c;备受社会各界关注。 一、北京已…

软考高级第四版备考--第12天(规划质量管理)Plan Quanlity Management

定义&#xff1a;识别项目及其可交付成果的质量要求、标准&#xff0c;并书面描述项目将如何证明符合质量要求、标准的过程。 作用&#xff1a;为整个项目期间如何管理和核实质量提供指南和方向 输入&#xff1a;项目章程&#xff08;项目章程中包含对项目和产品特征的高层级…

b4a开发安卓app

用免费云服务器&#xff0c;三丰云记录安卓开发过程 B4A&#xff08;Basic4Android&#xff09;是一种可用于开发安卓应用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它允许开发者使用 Basic 语言创建安卓应用。以下是使用 B4A 开发安卓 app 的一般步骤&#xff1a…

Windows中Git的使用(2024最新版)

Windows中Git的使用 获取ssh keys本地绑定邮箱初始化本地仓库添加到本地缓存区提交到本地缓存区切换本地分支为main关联远程分支推送到GitHub查看推送日志 Git 2020年发布了新的默认分支名称"main"&#xff0c;取代了"master"作为主分支的名称。操作有了些…

Python3 OS 文件/目录方法

os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示&#xff1a; 序号方法及描述1 os.access(path, mode) 检验权限模式2 os.chdir(path) 改变当前工作目录3 os.chflags(path, flags) 设置路径的标记为数字标记。4 os.chmod(path, mode) 更改权限5 os.…

【已解决】: fatal error: cuda_runtime_api.h: No such file or directory

既然他找不到&#xff0c;我们就把路径给他写清楚&#xff01; 检查自己是不是有这个文件&#xff1a; 去路径/usr/local下&#xff0c;使用命令查询是否拥有该文件&#xff1a; find . -name cuda_runtime_api.h结果&#xff1a; 因为我要使用的是cuda-11.3&#xff0c;因…

ChatGPT:aka是什么意思

ChatGPT&#xff1a;aka是什么意思 /*** The default initial capacity - MUST be a power of two.*/static final int DEFAULT_INITIAL_CAPACITY 1 << 4; // aka 16在这里&#xff0c;“aka” 是英语缩写“also known as”的意思。所以 1 << 4 也就是“也被称为1…

Spring Boot与HashiCorp Vault的集成

Spring Boot与HashiCorp Vault的集成 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中集成HashiCorp Vault&#xff0c;实…

【Spring Cloud】一个例程快速了解网关Gateway的使用

Spring Cloud Gateway提供了一个在Spring生态系统之上构建的API网关&#xff0c;包括&#xff1a;Spring 5&#xff0c;Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的路由方式&#xff0c;并为它们提供一些网关基本功能&#xff0c;例如&…

自用款 复制粘贴工具 Paste macOS电脑适配

Paste是一款专为Mac和iOS用户设计的剪贴板管理工具&#xff0c;它提供了强大的剪贴板增强功能。Paste能够实时记录用户复制和剪切的内容&#xff0c;包括文本、图片、链接等多种数据类型&#xff0c;并形成一个可视化的剪贴板历史记录&#xff0c;方便用户随时访问和检索。此外…