C++拷贝构造函数

news2024/11/24 17:30:35

文章目录


拷贝构造函数是一个c++的默认成员函数,它是用来拷贝对象的,当你想修改对象,但是又不想修改它本身,那么可以将其拷贝给一个对象对这个拷贝出来的对象进行操作
拷贝构造函数语法:类名(const 类名&类对象)以日期类为例:Date(const Date& d)
拷贝构造函数特征:

它是构造函数的一种重载形式:它只有一个显示参数,并且是类对象的引用

不是引用是完全行不通的,为啥?
因为函数在调用时,要先传参数,对于参数是内置类型,他没啥要求就是直接实参拷贝给形参,对于形参是自定义类型在函数调用时,参数传递会先调用它的拷贝构造,然后再执行改函数功能!
以d1做实参,调用fun函数,传参会先调用它的拷贝构造
在这里插入图片描述

在这里插入图片描述
调试观察!
如果参数不是引用,如果编译器不坚持那么就会一直调用下去
在这里插入图片描述
因为它的形参是自定义类型,相当于每次都是新定义的一个对象!而引用就是他自己的别名,他不是将一个对象的值给另一个对象!
拷贝构造函数因其是默认成员函数,那么当他没有被显示定义时,编译器也会自动生成的
只是它同构造函数对于内置类型成员变量的处理不同,构造函数是不处理内置成员变量的,拷贝构造函数会将值依次按字节拷贝给另一个对象!但是对于自定义类型的,它会去调用自己的拷贝构造函数
在这里插入图片描述
这里是没有写出它的拷贝构造函数的。
当自定义类型成员,它会去调用它的拷贝构造,那么如果这个拷贝构造并没有写出,它会自动生成且依次拷贝,就拿栈来说,若是动态申请的数组都按字节拷贝的话,两个栈会同时指向一块空间,那么当其中一个栈析构之后,另外一个也会对同一块空间再次析构依次,同一块空间是不能析构两次的额!并且当一个栈的改变会影响到另一个栈。这样于本意不符!而是要重新开与原栈相同的空间,然后按字节依次拷贝过去,这样就各自在各自空间,不用再担心析构两次的问题,这样为深拷贝,按值拷贝为浅拷贝!

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

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

相关文章

Java-API简析_java.util.StringTokenizer类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131293596 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

设计模式之——单例模式

✍🏼作者:周棋洛,计算机学生 ♉星座:金牛座 🏠主页:点击学习更多 🌐关键:JavaScript 单例 设计模式 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问…

【操作系统】程序运行环境

目录 1.处理器运行模式 1.1特权指令 1.2非特权指令 2.中断和异常的概念 2.1中断和异常的定义 2.1.1外中断 2.1.2内中断(异常) 2.2中断和异常的处理过程 3.系统调用 1.处理器运行模式 计算机系统中,通常 CPU 执行两种不同性质的程序:一…

【Android开发基础】手机传感器信息的获取

文章目录 一、引言二、了解1、概述2、关键 三、设计1、UI设计(1)主界面(2)适配器item 2、编码(1)获取数据(传感器信息)(2)渲染数据(初始化适配器&…

SpringBoot不在使用@Validated 做参数校验但是不想在Controller层怎么办?

目录 场景再现: 怎么做? 遇到了什么问题? 怎么实现? 场景再现: 某API接口接受加密的json字符串,接受字符串之后先进行解密处理,解密完成之后还要进行参数校验处理,如果参数不合规…

华为HCIA备考(数通) 易错题整理 PART1

1.IEEE802.1Q定义的 VLAN 帧格式中VLAN ID总共有多少bit 答:12 2.NAPT允许多个私有IP地址通过不同的端口号映射到同一个公有IP地址上,且不需要做任何关于端口号的配置。 3.IEEE802.1Q定义的VLAN帧总长度为多少字节? 答:4 4.关于…

2023亚马逊云科技中国峰会:强化学习探索—— Amazon DeepRacer

1️⃣前言 Amazon DeepRacer 是一个综合性的学习系统,可供各个水平的用户用来学习和探索强化学习以及试验和构建自动驾驶应用程序。 2️⃣Amazon DeepRacer 介绍 DeepRacer是一款小型自主驾驶车辆,它结合了深度学习、强化学习和云计算等技术&#xff0c…

Karl Guttag评Vision Pro(二):这些硬件问题不容忽视

上周,AR/VR光学专家Karl Guttag从价格、VST透视、应用、交互等方面,将Vision Pro与Quest Pro进行对比,发现Vision Pro在设计上做出更多正确决策。尽管如此,Guttag认为该头显本身在硬件部分,依然存在一些不易发现的问题…

C语言结构体计算大小结构体的对齐数,修改默认对齐数。

结构体的对齐规则 第一个成员在与结构体变量偏移量为0的地址处。剩余成员变量要对齐到对齐数的整数倍的地址处。 对齐数:编译器默认对齐数与该成员大小的较小值vs中默认对齐数为8没有默认对齐数,那么对齐数就是其本身成员大小 结构体总大小为最大对齐数…

2个小工具让你轻松解决大数据/数据库测试

目录 前言: 研究背景 工具 支持功能 支持功能 使用方法 总结 前言: 做大数据/数据库测试时,通常需要编写复杂的测试用例代码或手动操作来测试系统的正确性和稳定性。但是,有些小工具可以轻松解决这个问题,提高测试效率…

python自动化测试- 自动化框架及工具

1 概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化接口测试性价比最高接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。 如果你想学习自动化测试,我这边给你推…

智慧绿色档案馆之八防一体化解决系统方案

主要涉及系统: 智慧档案馆温湿度监控系统 智慧档案馆净化系统 智慧档案馆防火监控系统 智慧档案馆防盗监控系统 智慧档案馆漏水监控系统 智慧档案馆空气质量监控系统 智慧档案馆自动化恒温恒净化系统 智慧档案馆大数据云平台建设系统 (一)技…

C语言实现青蛙跳台阶问题【图解】

目录 问题分析方法1:找规律问题分析方法2:递归两种方法的代码 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法? 问题分析方法1:找规律 当n1时,显然…

vue+Nodejs+Koa搭建前后端系统(六)-- 用户登录

前言 采用vue3,vue-router版本为4.x前端构建工具采用viteIDE采用VSCODE,安装了MYSQL客户端插件 前端编写 安装并使用 vue-router 如果有vue-router,就略过这一小节。 vue-router完整教程:点这里>> 第一步:n…

MySQL ⽀持哪些存储引擎?默认使⽤哪个?MyISAM 和 InnoDB 引擎有什么区别,如何选择?

💧 M y S Q L ⽀持哪些存储引擎?默认使⽤哪个? M y I S A M 和 I n n o D B 引擎有什么区别,如何选择? \color{#FF1493}{MySQL ⽀持哪些存储引擎?默认使⽤哪个?MyISAM 和 InnoDB 引擎有什么区别…

centos tomcat

利用samba共享将所用的的组件复制到/usr/java/中 并给/usr/java设置777权限 Samba配置如下 重启smb服务 进入目录开始安装jdk 在当前目录解压jdk 配置环境变量 使配置生效 查看jdk版本 创建tomcat目录 解压tomcat的安装包到当前目录 进入tomcat配置目录 启动tomcat 先关闭在启…

【微服务】微服务架构设计

文章目录 背景一、流量入口Nginx二、网关三、业务组件四、服务注册中心五、缓存和分布式锁六、数据持久层七、结构型数据存储八、消息中间件九、日志收集十、任务调度中心十一、分布式对象存储 背景 当前,微服务架构在很多公司都已经落地实施了,下面用一…

01_Linux系统安装及使用

一、安装虚拟机软件 VMware16pro 安装链接:https://note.youdao.com/ynoteshare/index.html?id5fc5ad640596a0fbb41a21413ada4dad&typenote&_time1687172973066 二、安装Ubuntu 64 位 Linux系统 安装链接:https://note.youdao.com/ynoteshar…

【动态规划】简单多状态dp问题(1)打家劫舍问题

打家劫舍问题 文章目录 【动态规划】简单多状态dp问题(1)打家劫舍问题1. 按摩师(打家劫舍Ⅰ)1.1 题目解析1.2 算法原理1.2.1 状态表示1.2.2 状态转移方程1.2.3 初始化1.2.4 填表顺序1.2.5 返回值 1.3 编写代码 2. 打家劫舍Ⅱ2.1 题…

seaborn笔记:heatmap

绘制热力图 1 基本使用方法 seaborn.heatmap(data, *, vminNone, vmaxNone, cmapNone, centerNone, robustFalse, annotNone, fmt.2g, annot_kwsNone, linewidths0, linecolorwhite, cbarTrue, cbar_kwsNone, cbar_axNone, squareFalse, xticklabelsauto, yticklabelsauto, m…