【C++】类中的六个默认成员函数(构造函数、析构函数、拷贝构造函数、复制重载函数等)

类中的六个默认成员函数

默认成员函数为了解决C语言存在的一些问题而诞生,默认存在于类中,进行某种操作时会自动调用默认成员函数,如想在此种操作中自动实现某种操作,可以手动定义此默认成员函数,如果手动定义则取代默认成员函数。

一、构造函数

定义对象时会自动调用构造函数,用来进行对象的初始化,构造函数可以进行重载。

默认情况下:

  1. 默认构造函数对内置类型不进行初始化
  2. 对自定义类型,调用此自定义类型的构造函数
class A{			//语法格式
public:
  A(参数类型1 参数名1,....)  //函数名必须为类名
  {
	//默认情况下进行上面两种操作
    //可自定义为任何想要的操作,一般为初始化类成员变量
  }
}

定义时自动调用:

在这里插入图片描述

二、析构函数

对象在销毁时会自动调用析构函数,用来销毁此对象。析构函数不能进行重载。

默认情况下:

  1. 默认析构函数对内置类型直接进行回收
  2. 对自定义类型,调用此自定义类型的析构函数

需要注意如果类中存在动态内存开辟的成员,需要手动实现析构函数否则会存在内存泄漏。

class A{			//语法格式
public:
  ~A()		函数名必须为~加类名
  {
	//默认情况下进行上面两种操作
    //可自定义为任何想要的操作,一般为释放在堆空间开辟的内存空间而自定义
  }
}

对象在函数结束时自动销毁,所以函数结束时会自动对其进行调用:
在这里插入图片描述

三、拷贝构造函数

对象在进行拷贝操作时会自动调用拷贝构造函数,用来拷贝对象。(拷贝构造函数也是构造函数的重载,所以需要注意如果手动实现了拷贝构造函数就必须也手动实现构造函数,否则对象无法初始化)

默认情况下:

  1. 默认对内置类型直接进行浅拷贝
  2. 对自定义类型,调用此自定义类型的拷贝构造

如果类中存在指针或者动态内存开辟,则必须手动实现拷贝构造函数,否则会存在浅拷贝问题。

 class A{            //语法格式
public: 
     A(A& 参数名 )		
  //函数名为类名,参数类型为类名,且必须用引用的方式,否则会存在无限拷贝问题
   {
     //默认情况下进行上面两种操作
     //可自定义为任何想要的操作,一般为为解决浅拷贝实现
   }
 }

下面理解为通过拷贝a1的方式创建对象a2:

在这里插入图片描述

四、赋值重载函数

对象在进行赋值操作时会自动调用赋值重载函数,用来给对象进行赋值。

默认情况下:

  1. 默认对内置类型直接进行赋值
  2. 自定义类型成员变量需要调用对应类的赋值运算符 重载完成赋值

如果类中存在指针或者动态内存开辟,则必须手动实现赋值重载函数,否则也会存在浅拷贝问题。

  • 拷贝构造函数和复制重载函数实现的内容很像却有本质不同,拷贝构造函数是用于对未初始化的存储区进行初始化,而赋值重载函数则是处理一个已经存在的对象。对一个对象赋值,当它一次出现时,它将调用拷贝构造函数,以后每次出现,都调用赋值重载函数。拷贝构造函数只能用在对象的初始化操作中,而赋值重载函数可以用在任何类型的赋值操作中。
class A{
public:
    A& operator=(const A& a)
    {
        if (this != &A)
        {
            _x = a._x;
            _y = a._y;
        }
    int _x;
    int _y;
 };

int main()
{
	A a1;
    A a2;
    a2 = a1;
}

赋值运算符重载运用方式:

在这里插入图片描述

五、对普通对象取地址重载

此运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需 要重载,比如想让别人获取到指定的内容

默认存在形式

class A
{ 
public:
	A* operator&()
	{
		return this ;
	}
}; 

六、对const对象取地址重载

此运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需 要重载,比如想让别人获取到指定的内容

默认存在形式

class A
{ 
public:
 	const A* operator&()const
	{
		return this ;
	}
}; 

img

✨本文收录于C++语法及练习

当你喜欢一篇文章时,点赞、收藏和关注是最好的支持方式。如果你喜欢我的文章,请不要吝啬你的支持,点赞👍、收藏⭐和关注都是对我最好的鼓励。感谢你们的支持!如有问题欢迎指正!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强化学习驱动的狼人游戏语言智能体战略玩法

Language Agents with Reinforcement Learning for Strategic Play in the Werewolf Game 论文地址: https://arxiv.org/abs/2310.18940https://arxiv.org/abs/2310.18940 1.概述 在AI领域,构建具备逻辑推理、战略决策以及人类沟通能力的智能体一直被视为长远追求。大规模语…

Echarts 取消或改变鼠标移上效果

文章目录 问题分析解决补充:去掉鼠标移上去变小手问题 鼠标移动前 鼠标移动后 分析 鼠标一移上去老闪(显示浮框信息和图变大了) 解决 hoverAnimation:false即可解决 series: [{hoverAnimation:false,name:

从微分方程组构建 bbr 模型

描述分析 bbr 的文字自 2016 年底起至今从空白到泛滥,我自己在期间贡献了不少,本文又是一篇,但不同的是,本文尝试用闭环的数学模型给出一个 bbr 的全貌,顺便和 aimd 做对比。 先看带宽特性 bw(t),设瓶颈带…

力扣 hot100 -- 动态规划(下)

目录 💻最长递增子序列 AC 动态规划 AC 动态规划(贪心) 二分 🏠乘积最大子数组 AC 动规 AC 用 0 分割 🐬分割等和子集 AC 二维DP AC 一维DP ⚾最长有效括号 AC 栈 哨兵 💻最长递增子序列 300. 最长递增子序列…

数据结构JAVA

1.数据结构之栈和队列 栈结构 先进后出 队列结构 先进先出 队列 2.数据结构之数组和链表 数组结构 查询快、增删慢 队列结构 查询慢、增删快 链表的每一个元素我们叫结点 每一个结点都是独立的对象

一个spring boot项目的启动过程分析

1、web.xml 定义入口类 <context-param><param-name>contextConfigLocation</param-name><param-value>com.baosight.ApplicationBoot</param-value> </context-param> 2、主入口类: ApplicationBoot,SpringBoot项目的mian函数 SpringBo…

怎么在matlab中输出显示泵的流量-扬程和管路损失与流量均在一个表格里?讨论一下?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

挂载磁盘目录(挂载一个u01的磁盘目录)

这里我们没有u01磁盘目录&#xff0c;需要重新挂载一个u01磁盘目录 查看当前文件系统使用情况 [rootlocalhost ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev tmpfs …

BigMarket-基础层持久化数据库

需求 工程对接数据库 图例 结构说明 app-主要用于启动&#xff0c;没有业务逻辑 domain-业务逻辑&#xff0c;如积分的兑换&#xff0c;抽奖&#xff0c; infrastructure-基础层&#xff0c;技术支持&#xff0c;数据服务数据持久化&#xff1a;MySQL&#xff0c;redis&am…

threeJS 模型过大加载速度慢优化体验

前言 模型一般都比普通的前端项目要大&#xff0c;普通的模型要在1MB&#xff0c;大一点的就上不封顶了。模型越大&#xff0c;电脑加载的时间就越长。为了避免用户判断为bug&#xff0c;或者随便点击导致产生其他bug。我们需要增加进度条来提示用户。 解决方案 增加加载动画…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构③ | 4.6

前言 第4章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术相关的内容&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 4.6 网络架构 4.6.1 基本原则 4.6.2 局域网架构 4.6.3 广域网架构 4.6.4 移动通信网架构 4.6.5 软件定义网络 4.6…

全网最全,保姆级Stable Diffusion系列入门使用教程(图生图、LoRA、提示词权重),建议收藏!

大家好&#xff0c;我是画画的小强 今天将给大家讲解 Stable Diffusion 入门使用教程的 图生图、LoRA和提示词权重的教程&#xff0c;如果你还没有使用或者安装SD&#xff0c;那么可以看看我的往期入门教程AI绘画『Stable Diffusion』面向小白的免费AI绘画工具&#xff1a;解压…

spark基于Spark的对招聘信息的分析与设计-计算机毕业设计源码50716

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设计 3.1 系统架构设…

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)

当前&#xff0c;业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake&#xff0c;和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试&#xff0c;那么本篇文章我们将回归到大数据最基础的场景&#xff0c;对海量数据的批处理查询。本文…

微软子公司Xandr遭隐私诉讼,或面临巨额罚款

近日&#xff0c;欧洲隐私权倡导组织noyb对微软子公司Xandr提起了诉讼&#xff0c;指控其透明度不足&#xff0c;侵犯了欧盟公民的数据访问权。据指控&#xff0c;Xandr的行为涉嫌违反《通用数据保护条例》&#xff08;GFPR&#xff09;&#xff0c;因其处理信息并创建用于微目…

自动编码器(Autoencoders)

在“深度学习”系列中&#xff0c;我们不会看到如何使用深度学习来解决端到端的复杂问题&#xff0c;就像我们在《A.I. Odyssey》中所做的那样。我们更愿意看看不同的技术&#xff0c;以及一些示例和应用程序。 1、引言 ① 什么是自动编码器&#xff08;AutoEncoder&#xff…

本地部署,Colorizer: 让黑白图像重现色彩的奇迹

目录 引言 什么是 Colorizer ​编辑​编辑 Colorizer 的特点 工作原理 应用场景 本地部署 本地运行 实验与结果 结语 Tip&#xff1a; 引言 自摄影术发明以来&#xff0c;黑白图像一直是记录历史和艺术创作的重要手段。然而&#xff0c;黑白图像虽然具备其独特的美…

Git常见命令和用法

Git 文件状态 Git 文件 2 种状态: 未跟踪:新文件&#xff0c;从未被 Git 管理过已跟踪:Git 已经知道和管理的文件 常用命令 命令作用注意git -v查看 git 版本git init初始化 git 仓库初始化之后有工作区、暂存区(本地库)、版本库git add 文件标识暂存某个文件文件标识以终…

ts实现将相同类型的数据通过排序放在一起

看下效果&#xff0c;可以将相同表名称的字段放在一起 排序适用于中英文、数字 // 排序 function sortByType(items: any) {// 先按照类型进行排序items.sort((a: any, b: any) > {if (a.label < b.label) return -1;if (a.label > b.label) return 1;return 0;});r…

基于Python/MATLAB长时间序列遥感数据处理及在全球变化、植被物候提取、植被变绿与生态系统固碳分析、生物量估算与趋势分析应用

植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指示自然环境中的大气、水、土壤等成分的变化&#xff0c;其年际和季节性变化可以作为地球气候变化的重要指标。此外&#xff0c;由于…