C++类与对象(默认成员函数之拷贝构造函数)

news2024/10/6 4:09:59

接前几次的类与对象的默认函数的知识点,下来面是默认成员函数中的拷贝构造函数。是的,它的名字是拷贝构造函数,他其实也是一种构造函数,为什么呢?接下来你就知道了,我们直接看看代码,如下:

上面的代码是我随便写的一个类,其实在这里析构函数是没有必要写的,不影响什么,原因在上一篇文章中说过,这里就不重复了,我们言归正传,来看看主函数中我实例化了两个对象,第一个也就是t,它很好理解,我传参传了10,没有用构造函数的缺省值,那么第二个对象他会怎么初始化呢?还会不会调用构造函数呢?答案是它调用的是拷贝构造函数,我们先来看一下它调试完的结果,如下:

 

我调试了之后,大家可以看到,在1这个地方,都是没有初始化(因为这个是调试到这一句代码了,并没有执行),然后我又往下执行了一步,我们可以看到的是t已经实例化完成,并且已经初始化完成,是我们传参的那个数,再往下执行后,s也实例化完成,并且也是初始化完成。那么他们到底是调用的那个成员函数呢?我们再看这个结果:

 

 

改了下代码,我们可以清楚的看到的是,d与t的地址是一样的,而我在拷贝构造函数中,参数设置的是const Time& d,所以大家不难想象,这个d就是t的别名,所以充分的证明了实例化s的时候,调用的是拷贝构造函数。所以,在自定义类型中,我们实例化一个对象的时候,如果传的参数是同类型时,回电用拷贝构造函数。

那么下面是拷贝构造函数的一些特性,与构造函数一样,名字与类名相同,传参时必须要是引用,而且加const。那么好多人就疑惑了,在这里,为什么要用引用呢?很简单,因为如果不用引用,就像这样,const Time d,如果是这样的话,会引发无穷的拷贝构造函数,相当于死循环调用拷贝构造函数,为什么呢?因为在你用同类型的对象来实例化的时候,就相当于是这个同类型的对象给拷贝构造函数传参,因为是同类型,所以又会调用拷贝构造函数,一直这样无穷无尽的下去,所以一定要用引用。例如下图:

看了上面的图应该会清晰一点,那么,此时问题又来了,为啥要加const ,在我理解,因为此时的d是t的别名,所以我们加个const更加的安全,防止我们不小心把值给改了,加了const 就不会出现这样的问题了。

然后他与构造函数是一样的,如果我们自己不写拷贝构造函数,编译器是会默认生成的,会进行浅拷贝, 所以这里没什么说的。

然后就是,因为我用的编辑器是vim,可能是配置上的原因,导致using namespace std这句代码有警告,所以再用cin或是cout的时候,导致一直显示警告,然后就是调试我用的是gdb来调试的,原因是多用就可以熟悉,大家也可以多用用。用法前面的内容里有,而且非常详细。

最后就是,如果本篇内容对你有用的话就点一下赞吧!!让我看到你来过的痕迹。谢谢!

 

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

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

相关文章

【AICG】【Midjourney】AI自动生成图片的初接触

背景 现在是AI 比较流行,公司也推荐学习和了解AI的相关东西。 公司的内部培训中涉及到了Midjourney的简单讲解。 效果 由于我的账号注册的时候过了free窗口期: 现在要我花钱订阅: 只能看看其他人的帖子过过AI生成的瘾。 如图所示&#x…

【TA100】4.2 SSAO算法 屏幕空间环境光遮蔽

1 SSAO介绍 1.1 环境光遮蔽(AO) 全称Ambient Occlusion,是计算机图形学中一种着色和渲染技术,模拟光线达到物体的能力的粗略的全局方法,描述光线到达物体表面的能力。 这个场景看起来没有表示颜色的贴图,但是场景的…

SC5103接口可pin对pin兼容TLK1501

SC5103 用于超高速双向点对点数据传输系统。SC5103 支持 0.6Gbps 至 1.5Gbps 的有效串行接口速度,提供高达 1.2Gbps 的有效数据带宽。可pin对pin兼容TLK1501。 SC5103 可替代并行传输数据结构从而减少传输路径数、连接端子数、发送/接收端子数。并行数据被发送链路转…

求职贴 | 多源融合定位方向24届硕士秋招求职

求职方向 多源融合定位 / LIO / VIO 基本情况 现就读于华中区某985,研究方向为多源融合定位,主要内容是LiDAR / IMU融合两篇期刊论文在投,论文内容即项目经历;具有丰富的电子设计类竞赛经历自我认为学习能力强,爱动…

JavaSE-15 【异常】

文章目录 JavaSE-15 【异常】第一章 什么是异常1.1 异常的概念1.2 异常的体系1.3 异常的分类1.4 异常产生的过程 第二章 异常的处理2.1 抛出异常throw2.2 声明异常throws2.3 捕获异常try...catch2.4 finally 代码块2.5 异常注意事项 第三章 自定义异常3.1 自定义异常概述3.2 自…

工业物联网解决方案:远程组态监控管理系统

如何高效的采集和集中工业设备PLC运行数据、工艺参数、产品质量等生产数据,通过数据分析反馈在制造工艺、生产流程、质量管理、设备维护和能耗管理的智能应用,这是工业远程组态监控管理系统可以解决的问题,也是众多工厂企业关注的重点。 工…

动态规划--输出路径06.25

https://www.cnblogs.com/jbelial/articles/2116074.html 博客参考 https://www.cnblogs.com/jbelial/articles/2116074.html 12. 背包问题求具体方案 - AcWing题库 由于需要求解最小字典序,尝试输入数据时逆序输入,其他不改变,状态含义不变…

奇安信浏览器调用JM9硬件解码操作教程

本文讲述如何通过奇安信浏览器调用景嘉微JM9系列显卡的硬件解码。 判断硬件解码是否打开方法 1.检查奇安信浏览器版本。dpkg -l | grep qaxbrowser,我这里是1.0.45209.2-1版本。要大于等于这个版本的奇安信浏览器才支持硬件解码。 2.打开奇安信浏览器&#xff…

海思平台OSD的实现

目录 1.海思平台OSD理论学习 1.1、OSD概述 1.2、海思OSD的4种类型 1.3、海思OSD的几个重要概念 1.4、海思平台OSD使用方法 1.5、海思平台OSD的API和关键数据结构 2.使用海思接口实现OSD---代码框架 2.1、函数调用层次 2.2、前\背景透明度、背景颜色 3.使用字库字符实现…

Jmeter远程服务模式运行时引用csv文件的路径配置

目录 前言: 问题 解决方法 前言: 在JMeter远程服务模式下运行时,你可以通过配置CSV文件的路径来引用该文件。CSV文件经常用于存储测试数据,可以在测试中进行参数化。 问题 在使用jmeter过程中,本机的内存等配置不…

掌握GDB调试工具,轻松排除bug!

一、什么是GDB gdb是GNU debugger的缩写,是编程调试工具。 GDB官网: https://www.gnu.org/software/gdb/GDB适用的编程语言: Ada / C / C / objective-c / Pascal 等。GDB的工作方式: 本地调试和远程调试。 目前release的最新版…

RRT* 算法研究(附 MATLAB 和 Python 实现)

RRT* 算法研究 参考 机器人路径规划、轨迹优化课程-第六讲-RRT*算法原理和代码讲解 路径规划 | 随机采样算法:PRM、RRT、RRT-Connect、RRT* 基于采样的运动规划算法-RRT(Rapidly-exploring Random Trees) 《改进RRT算法在移动机器人路径规划中的应用研究》 理论基础…

全网超全,pytest自动化测试框架pytest.ini配置文件详细(实战)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 pytest配置文件可…

Java 实现word、excel、ppt、txt等办公文件在线预览功能!

如何用 Java 实现word、excel、ppt、txt等办公文件在线预览功能?本文告诉你答案! java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务,不过需要收费。 如果想要免费的,…

【ISO26262】汽车功能安全:以汽车安全完整性等级为导向和以安全为导向的分析

关于 ASIL剪裁的要求分解 表 A.1 以汽车安全完整性等级为导向和以安全为导向的分析的概览

Android Binder通信原理(五):Java 端的service 注册和获取

源码基于:Android R 0. 前言 在阐述相关的知识点,先整理个框架图,后面带着框架图来分析过程: Java 端对于binder 使用大致分为: Java client Java serviceJava client native service Java 端service 的注册使用 Se…

前端如何进行页面优化_如何优化前端页面

优化前端页面 1 .前期准备 1.1 首页命名为index.html / index.htm / index.php等。 1.2 需要制作404页面。 1.3 文件夹结构合理。 1.4 命名使用英文且有语义性的单词,并提供参考文档。 2 .结构 2.1 文件头部分 2.1.1 需要提供文档声明 2.1.2 设置utf-8的编…

虚拟机创建linux系统并使用SSH工具连接

安装VMware Workstation 创建新的虚拟机或从别人那里拷贝虚拟机文件,下面是我从别人那里拷贝的 虚拟机存在后,点击播放按钮启动虚拟机 启动成功后,长这个样子 虚拟机启动成功后,不想用linux指令操作,而是用windows的可…

报错:Information:java: javacTask: 源发行版 8 需要目标发行版 1.8

1.背景 编译项目或启动项目报错 2.解决方法 设置为对应的版本 3.完美