【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++语法及练习

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

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

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

相关文章

力扣155.最小栈

力扣155.最小栈 用栈存对组 first为元素&#xff0c;second为当前栈内最小值 class MinStack {stack<pair<int, int>> st;public:MinStack() {}void push(int x) {if(st.size() 0)st.push({x,x});elsest.push({x,min(x,st.top().second)});}void pop() {st.pop…

LASA数据集

一、LASA数据集介绍 LASA Handwriting Dataset包含字母表中手写字母的二维轨迹&#xff08;位置和速度&#xff09;。这些已被广泛用于将复杂轨迹的建模与动力学系统进行比较。 LASA数据集是由EFPL大学A. Billard教授团队提供的。 二、LASA数据集链接 LASA Handwriting Dat…

谷歌广告投放技巧--购物广告,Pmax广告

我的文章首发在公众号,之后同步到CSDN,知乎,还有个人博客:haiwaibiji.com. 本次更新的内容是谷歌展示广告+购物广告(PLA)+Pmax广告投放的核心事项,广告的东西有很多,很杂,但核心其实就那么一两样,至于其他的,锦上添花为主。 展示广告 投放-核心事项 标准展示广告 …

解决Spring Boot中的国际化与本地化问题

解决Spring Boot中的国际化与本地化问题 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 国际化与本地化概述 在开发面向全球用户的应用程序时&#xff0c;国际化&#xff08;Internationalization…

kafka与zookeeper的SSL认证教程

作者 乐维社区&#xff08;forum.lwops.cn&#xff09;许远 在构建现代的分布式系统时&#xff0c;确保数据传输的安全性至关重要。Apache Kafka 和 Zookeeper 作为流行的分布式消息队列和协调服务&#xff0c;提供了SSL&#xff08;Secure Sockets Layer&#xff09;认证机制&…

汇凯金业:如何判断黄金的买入时机

黄金&#xff0c;作为全球公认的避险资产&#xff0c;其价格波动受到多种因素的影响&#xff0c;包括经济数据、货币政策、地缘政治风险等。对于投资者而言&#xff0c;把握黄金的最佳买入点是实现投资收益最大化的关键。本文将探讨影响黄金价格的主要因素&#xff0c;并提供一…

食品安全管理员考试模拟题及答案

食品安全管理员考试模拟题及答案 1.食品经营者聘用"不得从事食品生产经营管理工作的人员"从事管理工作的&#xff0c;由原发证部门实施(  )。 A.停业整顿 B.吊销可证 C.责令改正 答案&#xff1a;B 2.使用紫外线灯消毒的&#xff0c;应在无人工作时开启(  …

嵌入式Bootloader面试题面面观(2万字长文)

Bootloader的主要功能是什么? Bootloader是系统启动过程中运行的第一个程序,其主要功能是在操作系统内核运行之前完成必要的硬件初始化和设置,为内核的加载和运行创造合适的环境。具体而言,Bootloader的任务包括但不限于以下几个方面: 硬件初始化:初始化CPU、内存控制器…

八大排序之——计数排序全方位剖析!(小白也能轻松看懂!)

目录 1. 计数排序的思想动图 2. 从思想到代码的实现 >1.创建临时数组 >2.统计次数 >3.排序 >4.简单版本 3. 是否可以优化呢~ 4. 计数排序的时空复杂度 5.总结 计数排序的优点 计数排序的局限性 6、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来…

【腾讯云业务运营暑期实习面试题】

题目&#xff1a; &#xff08;全程大概50来分钟左右&#xff0c;面试官挺好的&#xff0c;不清楚的问题也在一直引导我&#xff0c;总体来说非常好&#xff0c;挺喜欢这个面试官的&#xff09; 1、自我介绍 2、讲讲文件的权限以及把目录下所有文件都修改 文件的权限 rwx --&…

动态规划(DFS -> 记忆化搜索 ->动态规划)

问题一&#xff1a; 首先看一个最经典的问题&#xff1a;上台阶问题。P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 我们首先看一下&#xff0c;如何用DFS的方法进行解题。 假设我们要上到第5级台阶&#xff1a; 可以看出上到第五级台阶时&#xff0c;可能是…

oak相机使用oak官网方式标定

目录 一、depthai ROS驱动 一、depthai ROS驱动 &#xff08;1&#xff09;驱动下载地址&#xff1a;2. C 开发快速上手 — DepthAI Docs 0.3.0.0 documentation sudo apt install ./depthai_2.17.1_arm64.deb //运行 Python3 utilities/cam_test.py -mres 400 -cams rgb,m …

探索大模型:袋鼠云在 Text To SQL 上的实践与优化

Text To SQL 指的是将自然语言转化为能够在关系型数据库中执行的结构化查询语言&#xff08;简称 SQL&#xff09;。近年来&#xff0c;伴随人工智能大模型技术的不断进步&#xff0c;Text To SQL 任务的成功率显著提升&#xff0c;这得益于大模型的推理、理解以及指令遵循等能…

自闭症学校排名前十:为星儿点亮未来

在自闭症教育领域&#xff0c;有许多优秀的学校和机构为自闭症儿童提供着专业的帮助和支持。 星贝育园&#xff1a;以其独特的教育理念和个性化的教学方法脱颖而出。学校拥有一支经验丰富、富有爱心的教师团队&#xff0c;为孩子们提供全方位的关爱和教育。注重培养孩子的综合能…

手机通讯录大营救,恢复sim卡联系人的3个重要方法

在数字化世界的浩瀚海洋中&#xff0c;手机通讯录就像一艘承载着人际关系的生命之船。然而&#xff0c;当这艘船遭遇风浪&#xff0c;即sim卡上的联系人信息意外丢失时&#xff0c;我们该如何进行一场惊心动魄的大营救&#xff0c;找回那些珍贵的联系人呢&#xff1f;别担心&am…

httpClient发送https请求报错认证失败确少SSL证书的问题

报错内容 sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target解决办法 1NG做跳转处理&#xff0c;先将https请求改为向ng发…

Backend - C# 的日志Lognet4

目录 一、安装 log4net 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、配置 &#xff08;一&#xff09;配置AssemblyInfo.cs &#xff08;二&#xff09;配置log4net.config 1. 创建log4net.config文件&#xff08…

空间自回归模型及 Stata 具体操作步骤

目录 一、理论原理 二、数据准备 三、程序代码及解释 四、代码运行结果 一、理论原理 空间自回归模型&#xff08;Spatial Autoregressive Model&#xff0c;SAR&#xff09;是一种用于分析具有空间相关性的数据的统计模型。它假设观测值之间的相关性不仅取决于传统的时间或…

xxl-job从2.3.0升级到2.4.1版本遇到的问题及解决方法

一、maven升级版本 <!-- xxl-job包 --> <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.1</version> </dependency> 二、在nacos对应服务的配置文件增加accessToken配…

精益创业方法论在创业实践中的应用:以乔布斯视角探索创新与变革的艺术——张驰咨询

史蒂夫乔布斯以其非凡的愿景、不懈的迭代精神与对产品极致的追求&#xff0c;成为无数创业者心中的灯塔。本文将借鉴乔布斯的创新思维与精益创业方法论相结合&#xff0c;构建一套融合理论与实践的深度框架&#xff0c;旨在指导创业者在不确定的市场环境中高效探索、快速验证并…