构造函数,析构函数,拷贝构造函数与运算符重载简图总结,赋值运算符重载与前置++后置++的重载参数区分

news2024/12/23 2:03:58

构造函数简图

请添加图片描述

析构函数简图

请添加图片描述

拷贝构造函数简图

请添加图片描述

运算符重载简图

在这里插入图片描述

赋值运算符重载与拷贝构造函数的区别

  1. = 即为赋值运算符
  2. 这涉及到两个已经存在的实例化对象之间的复制拷贝。
  3. 这个与拷贝构造函数是完全不一样的,拷贝构造函数它的本质上就是一个构造函数,主要是用一个已经存在的实例化对象去初始化另外一个实例化对象。
  4. 这个确实与拷贝构造函数很容易发生混淆,拷贝构造函数主要是针对类的实例化对象,在进行函数的传值调用与传值返回的时候会发生调用拷贝构造函数,因为在进行实例化对象的参与到函数的传值调用与传值返回的时候,在这两者过程当中都会有新的实例化对象的生成,那也就需要去调用构造函数,即拷贝构造函数
  5. 但是实例化对象之间的赋值就并不是这样子,因为在赋值的过程当中并没有发生新的实例化对象的生成,而是两个已有已存在的是实例化对象之间的赋值拷贝,也就是说在这个过程当中并没有新的实例化对象的生成,既然没有类的实例化对象的创建,并且由于构造函数只在对象的生命周期内只调用一次,所以在赋值的时候跟构造函数没有任何一点关系,这边的主角是运算符重载函数,也就是对赋值运算符=进行运算符重载
  6. 在这里插入图片描述

赋值运算符重载

在这里插入图片描述

  1. 然后在类当中去实现成员函数operator=的时候,值得注意的是:隐藏的this指针,并且由于在c语言当中是支持连等的,我们这个运算符重载函数,最好也是需要能够支持这一点,这也就意味着对于这个函数的返回类型不能是void之类,需要返回一个类的实例化对象,如果说返回的真的是一个实例化对象的话,那么这时候又会发生拷贝构造函数的调用,会影响效率,于是这时候就采用函数的引用返回。
  2. 当然还有一个小点就是说如果是自己给自己赋值的话,这是没有任何必要的,所以说可以用if去判一下
  3. 然后由于赋值运算符重载函数也是一个默认成员函数,所以说如果你没有去显示实现的话,编译器也会默认去生成一个,但是对于编译器默认生成的赋值运算符重载函数,对于实例化对象当中的内置类型的成员仅仅会进行最直白而简单的浅拷贝/值拷贝,然后对于实例化对象当中的自定义类型成员则会去调用对应自定义类型成员的赋值运算符重载函数,麻雀虽小五脏俱全
  4. 但有时候这样子是可能会出问题的,对于拷贝构造函数那边道理是类同的,所以说如果对于那些类的实例化对象当中有申请资源的那种实例化对象,比如说自己模拟栈,那么这时候还是需要去自己实现赋值运算符重载函数
  5. 然后由于这个赋值运算符重载函数他是属于类的一个默认成员函数,然后对于类的默认成员函数的话是不能够给他放到全局里面去的,也就是说是只能够给他在类的里面,因为如果你把它给他弄到全局去的话,那么在类当中就没有该默认成员函数,那么就会自己默认生成一个,那这样子去全局的那个就会发生冲突。所以说对于默认成员函数的话,它本质上也是类当中的一个成员函数,因此是绝对不可以给他放到全局里面去。当然在类当中去声明该函数,然后定义的话写在全局那边(加上域作用限定符),这是完全可以的
  6. 示例:
Stu& operator=(const Stu& x2)
{
	if (&x2 != this)
	{
		memcpy(name, x2.name, sizeof(char) * 10);
		age = x2.age;
		score = x2.score;
	}
	return *this;
}

在这里插入图片描述

赋值运算符只能重载成类的成员函数不能重载成全局函数

在这里插入图片描述

前置++与后置++的重载

  1. 前置++与后置++的区别就在于:对于前置++而言是先给他加上一再去使用那个值,对于后置++而言的话是先去使用那个值,然后再把那个值给他加上一,这个就是这两个运算符没有被重载之前的所表达的含义,并且他们的操作数往往都是整数
  2. 我现在如果说想要把这两个操作符给他重载一下的话,首先必须得明白什么是运算符的重载,其实根本的目的就在于想要把这个运算符它所能适配的操作数的类型范围给他进行扩大,而不仅单单就是一个整数,比方说对于某些类的实例化对象也可以使用这个操作符,但当然不是说对于这个类的实例化对象给他去+1,这样也没有任何实际的意义,所以说这个前置++与后置++运算符重载之后如果说类的实例化对象想要去使用前置++或后置++,可能它的作用就在于对于其中的某个成员变量去进行前置++或者后置++等等等等
  3. 但是因为如果说没有进行特殊规定的话,你会发现这两个操作符前置++和后置++他们进行重载的时候是没有办法进行很好的一个区分,所以C++规定:后置++重载时多增加一个int类型的参数,但调用函数时该参数不用传递,编译器自动传递
  4. 代码样本:
#include <iostream>
using namespace std;
class Stu
{
public:
	void show()
	{
		cout << age << " " << score << endl;
	}
	void input()
	{
		cin >> age >> score;
	}
	Stu operator++(int)
	{
		Stu tmp = *this;
		age++;
		return tmp;
	}
	Stu& operator++()
	{
		age++;
		return *this;
	}
private:
	int age = 0;
	double score = 0;
};
int main()
{
	Stu s1;
	Stu s2;
	s1.input();
	s2.input();
	(s1++).show();
	(++s2).show();
	return 0;
}

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

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

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

相关文章

C++ 类和对象下

文章目录 重载operator<< 输出自定义类型const对象 无法调用 非const成员函数非const函数的缺陷 初始化列表&#xff1a;对象的成员定义的位置为什么会要用到初始化列表&#xff1f;自定义类型成员如何初始列表初始化灵活的初始化列表声明次序内置类型_size不给缺省值&am…

win10系统电脑硬盘里的文件不显示,到底出了什么问题呢?有什么解决方法呢?

演示机型&#xff1a;技嘉 H310M HD22.0 系统版本&#xff1a;Windows 10 专业版 软件版本&#xff1a;云骑士数据恢复软件3.21.0.92 Win10系统是我们经常使用的操作系统之一&#xff0c;但这也意味着我们可能会遇到一些问题。其中一个比较常见的问题是硬盘中的文件不显示。在这…

国内又款智能AI聊天软件-科大讯飞星火模型

介绍 介绍 中国科大讯飞星火GPT聊天软件是一款基于自然语言处理技术的人工智能聊天机器人。它利用了大量的文本数据&#xff0c;通过深度学习模型进行训练&#xff0c;从而实现与用户的智能对话。讯飞星火GPT聊天软件能够理解用户输入的问题或指令&#xff0c;并根据预设的回答…

MySQL 主从复制涉及到了几个线程?

目录 前言一、主从同步原理二、主从同步分析 前言 说到主从&#xff0c;我相信大家在 MySQL 这一节面试经常被问到MySQL 的主从复制原理&#xff0c;而且大家背得滚瓜烂熟。但是在主从复制的过程中&#xff0c;是如何进程数据同步的&#xff0c;又涉及到了哪些线程呢&#xff…

卖一辆亏5.8万美元!福特的困扰

随着电动化进入关键的「抢量」周期&#xff0c;加上年初掀起的降价潮&#xff0c;对于还无法适应转型节奏的传统汽车制造商来说&#xff0c;现在是一个艰难的时刻。 本月初&#xff0c;福特首席执行官Jim Farley表示&#xff0c;电动汽车市场的降价是"令人担忧的趋势"…

js垃圾回收机制各阶段问题以及解决方案

很多文章的三色标记法&#xff0c;增量标记法&#xff0c;新生代老生代&#xff0c;引用计数法&#xff0c;标记回收法。很容易给最开始学习垃圾回收算法的朋友搞混。文章适合有一部分基础&#xff0c;但是要把算法搞混的朋友们。这篇文章带大家梳理一下本人的思路&#xff0c;…

ASEMI代理ADV7125JSTZ330原装ADI车规级ADV7125JSTZ330

编辑&#xff1a;ll ASEMI代理ADV7125JSTZ330原装ADI车规级ADV7125JSTZ330 型号&#xff1a;ADV7125JSTZ330 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;LQFP-48 批号&#xff1a;2023 引脚数量&#xff1a;48 工作温度&#xff1a;-40C~85C 安装类型&#xff1a;表面…

深夜12点,果断卸载Access,3分钟启用国产Access,源自WPS

Access的“忠实粉丝”&#xff0c;你我皆可能是一员 历经20多年迭代的微软Access&#xff0c;因简单易用&#xff0c;在全球吸引了一大批的“忠实粉丝”&#xff0c;你我可能就是其中的一员。 基于Windows操作系统的集成开发的大环境&#xff0c;Access的灵活性和实用性大大提…

QUIC在京东直播的应用与实践 | 京东云技术团队

作者&#xff1a;京东零售 周凯 一. 前言与背景 国内的互联网直播技术从2005年前后兴起&#xff0c;彼时最具代表性的直播产品是由PPLive创始人姚欣在华中科技大学就读期间发起的校园直播项目PPLive。当时的直播技术用的还是基于windows系统自带的mediaplayer内置的COM组件开…

小程序uniapp利用canvas生成海报并可以保存至相册

✨uniapp实现生成海报并保存至相册组件&#xff0c;u-popup可以根据自己所使用的组件进行替换 这里主要讲的是JS部分&#xff0c;css和元素相关的就不展开赘述了&#xff0c;下方先给大伙看看效果图&#xff0c;图的下方有代码讲解&#xff0c;最下方有完整代码&#xff0c;如…

Echarts 热力图的详细配置过程

文章目录 一&#xff0c;配置过程二&#xff0c;具体实例 一&#xff0c;配置过程 引入Echarts库和热力图插件 <script src"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> <script src"https://cdn.jsdelivr.net/npm/…

Java多线程入门到精通学习大全?了解线程池和线程常用集合的基本原理、代码示例!(第六篇:线程池和集合的学习)

设计和实现多线程应用程序需要了解线程池、线程常用集合等相关知识。下面我们将分别介绍线程池、线程常用集合的原理、使用场景、代码示例、注意事项和总结。 1. 线程池 线程池是一种线程调度机制&#xff0c;它可以管理多个线程&#xff0c;并且可以重复使用这些线程来处理多…

Transformers回顾 :从BERT到GPT4

人工智能已成为近年来最受关注的话题之一&#xff0c;由于神经网络的发展&#xff0c;曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成&#xff0c;人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得…

大众软件之变:宾利品牌制造负责人接任CARIAD CEO

作者 | 德新 编辑 | 王博 上周五&#xff0c;Business Insider爆料了大众软件组织CARIAD人事大调整&#xff0c;董事会几乎全军覆没&#xff0c;引发轩然大波。 这周一&#xff0c;大众的官宣接踵而至——大众集团老兵、原宾利品牌制造负责人Peter Bosch接替CARIAD CEO一职。 …

《基于光学传感器的心房颤动检测:综述》阅读笔记

目录 一、论文摘要 二、论文十问 Q1&#xff1a;论文试图解决什么问题&#xff1f; Q2&#xff1a;这是否是一个新的问题&#xff1f; Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f; Q4&#xff1a;有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一课…

数智无限|东土科技科东软件5月活动预告

这个5月&#xff0c;东土科技&科东软件将携带自主研发的国产操作系统Intewell、智能控制通用工具软件MaVIEW、边缘通用控制器NewPre、基于TSN技术的智能化工业网络硬件、数字工厂智能产线一站式解决方案&#xff0c;以及面向智能工厂的离散控制、流程控制、运动控制、机器人…

赋能户外赛事,时空道宇率先实现卫星应用商业闭环

最近这两年&#xff0c;卫星通信的崛起速度惊人&#xff0c;几乎成为了一个现象级风口。 在低轨星座、高通量卫星等技术的推动下&#xff0c;卫星通信的服务能力有了极大的提升&#xff0c;不仅覆盖范围越来越广阔&#xff0c;网络连接速率和时延也有了显著进步。 进入2023年以…

【沐风老师】3DMAX艺术样条线增强螺旋线插件使用教程

3DMAX艺术样条线、增强螺旋线插件使用教程 完美漂亮的卷曲形状&#xff01; 3DMAX艺术样条线插件用于创建漂亮的螺旋线、卷曲线和环形结样条曲线&#xff0c;具有数学精度。 例如制作饰品、装饰品、铁制品设计、珠宝、布饰品、古代文化的符号、触角、动画/分发/变形的路径等等…

5万字数字乡村建设与示范项目可行性研究报告

5.1 “三平台”&#xff1a;建设支撑农业发展农村治理惠民服务的三大应用平 台 5.3.1 建设智慧农业综合服务平台 夯实数字农业基础&#xff0c;推进重要农产品全产业链大数据建设。推进农业数字化转型&#xff0c;加快推广云计算、大数据、物联网、人工智能在农业生产经营管理…

基于STL的演讲比赛管理系统

目录 一、比赛规则描述 二、比赛程序的功能 三、比赛的运行结果 四、程序的实现 1、程序实现的大致思路 2、程序的模块化 <1>选手信息的类 <2>管理比赛所有进度的接口头文件 <3>比赛进行的实现 <4>用户的交互界面<演讲比赛管理系统.cpp>…