当前位置: 首页 > news >正文

【C++】构造函数和析构函数第二部分(拷贝构造函数)--- 2023.9.28

目录

      • 什么是拷贝构造函数?
      • 编译器默认的拷贝构造函数
      • 构造函数的分类及调用
      • 结束语

什么是拷贝构造函数?

用一句话来描述为拷贝构造即 “用一个已知的对象去初始化另一个对象

具体怎么使用我们直接看代码,代码如下:

class Maker
{
public:Maker(){cout << "无参构造函数" << endl;a = 20;}Maker(const Maker &m){cout << "拷贝构造函数" << endl;a = m.a;}//打印函数void printMaker(){cout << "a=" << a << endl;}
private:int a;
};void test01()
{Maker m1;m1.printMaker();Maker m2(m1);m2.printMaker();
}

好!按照老样子,接下来开始详细讲解每行代码的用处,以及为什么这样写!

Maker m1;

//首先实例化一个对象,并且该对象名为m1。

m1.printMaker();

//通过对象m1来调用Maker类中的printMaker()方法。

Maker m2(m1);

//相当于是用一个已有的对象(m1)来初始化另一个对象,并且该对象名为m2,相当于“套娃”,一层套一层。

m2.printMaker();

//使用已经实例化成功的对象m2来调用Maker类中的printMaker()方法。

Maker(const Maker &m){cout << "拷贝构造函数" << endl;a = m.a;}

//这里需要大家特别注意,我们使用拷贝构造函数的形参必须要引用,至于为什么,我们一起来探索为什么不能用引用。
//先上代码:

class Maker3
{
public:Maker3(int Ma){cout << "有参构造函数" << endl;ma = Ma;}Maker3(const Maker3 m)//注意这里的形参不是引用{cout << "拷贝构造函数" << endl;}
private:int ma;
};void test03()
{Maker3 m1(10);//调用有参构造Maker3 m2(m1);
}

好!按照老样子,接下来开始详细讲解每行代码的用处,以及为什么这样写!

  1. 首先 Maker3 m2(m1);使用了拷贝构造函数,m1为形参。
  2. Maker3 m2(m1); 《===》const Maker3 m=m1;
  3. const Maker3 m=m1; 《===》const Maker3 m(m1);
  4. const Maker3 m(m1); 《===》const Maker3 m=m1;
  5. 然后进入了死循环,接下来会执行const Maker3 m=m1; 《===》const Maker3 m(m1);以此类推。
  6. 所以我们使用拷贝构造函数的条件下,形参应该是引用!!!

编译器默认的拷贝构造函数

如果我们使用拷贝构造函数来用一个对象来初始化另一个对象时,忘记在类中创建拷贝构造函数方法,那么此时其实也不会报错,也能正常运行,因为编译器已经默认提供了拷贝构造函数。为了更清楚的展示,先上代码:

class Maker2
{
public:Maker2(){cout << "无参构造函数" << endl;a = 20;}//打印函数void printMaker(){cout << "a=" << a << endl;}
private:int a;
};void test02()
{Maker2 m1;m1.printMaker();Maker2 m2(m1);m2.printMaker();
}

//在上述代码中我们并没有在类中创建拷贝构造函数,运行结果如下:在这里插入图片描述

如上图所示,当对象m2调用printMaker()方法时,并没有报错,而是正常将a的值打印出来,并且打印值没有问题,这是因为编译器已经设置默认的构造函数,那这个构造函数长什么样子呢?如下所示:

Maker2(const Maker2 &m)
{a = m.a;
}

//默认拷贝构造函数进行了成员变量的简单拷贝,所以我们才能准确无误的将变量打印出来,即a=m1.a=20。

构造函数的分类及调用

构造函数的分类分为三种,分别是:

  1. 无参构造函数
  2. 有参构造函数
  3. 拷贝构造函数

上述三种均已讲完。

那么在类中编译器默认提供了哪些函数呢?分别是:

  1. 默认的构造函数
  2. 默认的析构函数
  3. 默认的拷贝构造函数

我们最后在分析一下这几种构造函数的软件使用方法:

void test01()
{Maker m;//调用无参构造函数Maker m1(10);//调用有参构造Maker m2(m1);//调用拷贝构造//不常用Maker m4 = Maker(10);//调用的是有参构造函数Maker m3 = m2;//调用拷贝构造Maker m5 = 10;//Maker m5=Maker(10); 调用的是有参构造函数Maker m6;m6 = m5;//赋值操作}

结束语

如果觉得这篇文章还不错的话,记得点赞 ,支持下!!!

相关文章:

【C++】构造函数和析构函数第二部分(拷贝构造函数)--- 2023.9.28

目录 什么是拷贝构造函数&#xff1f;编译器默认的拷贝构造函数构造函数的分类及调用结束语 什么是拷贝构造函数&#xff1f; 用一句话来描述为拷贝构造即 “用一个已知的对象去初始化另一个对象” 具体怎么使用我们直接看代码&#xff0c;代码如下&#xff1a; class Maker…...

现在学RPA,还有前途吗,会不会太卷?

RPA是机器人流程自动化的缩写&#xff0c;是一种通过软件机器人模拟人类操作计算机的技术。随着人工智能和自动化技术的不断发展&#xff0c;RPA已经成为了企业数字化转型的重要工具之一。那么&#xff0c;现在学习RPA还有前途吗&#xff1f;会不会太卷&#xff1f; 一、RPA的…...

Vue的详细教程--用Vue-cli搭建SPA项目

Vue的详细教程--用Vue-cli搭建SPA项目 1.Vue-cli是什么2.什么是SPA项目1.vue init webpack spa2.一问一答模式2&#xff1a;运行完上面的命令后&#xff0c;我们需要将当前路径改变到SPA这个文件夹内&#xff0c;然后安装需要的模块此步骤可理解成&#xff1a;maven的web项目创…...

openldap访问控制

系统&#xff1a;debian12 /etc/ldap/slapd.d/cnconfig目录下 包含以下三个数据库&#xff1a; dn: olcDatabase{-1}frontend,cnconfig dn: olcDatabase{0}config,cnconfig dn: olcDatabase{1}mdb,cnconfigolcDatabase: [{\<index\>}]\<type\>数据库条目必须具有…...

阿里云服务器技术创新、网络技术和数据中心技术说明

阿里云服务器技术创新、网络技术创新、数据中心技术创新和智能运维&#xff1a;云服务器方升架构、自研硬件、自研存储硬件AliFlash和异构计算加速平台&#xff0c;以及全自研网络系统技术创新和数据中心巴拿马电源、液冷技术等技术创新说明&#xff0c;阿里云百科分享阿里云服…...

华为智能高校出口安全解决方案(2)

本文承接&#xff1a; https://qiuhualin.blog.csdn.net/article/details/131475315?spm1001.2014.3001.5502 重点讲解华为智能高校出口安全解决方案的基础网络安全&业务部署与优化的部署流程。 华为智能高校出口安全解决方案&#xff08;2&#xff09; 课程地址基础网络…...

【AI绘画】Stable Diffusion WebUI

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...

html、css学习记录【uniapp前奏】

Html 声明&#xff1a;该学习笔记源于菜鸟自学网站&#xff0c;特此记录笔记。很多示例源于此官网&#xff0c;若有侵权请联系删除。 文章目录 Html声明&#xff1a; CSS 全称 Cascading Style Sheets&#xff0c;层叠样式表。是一种用来为结构化文档&#xff08;如 HTML 文档…...

Linux-正则三剑客

目录 一、正则简介 1.正则表达式分两类&#xff1a; 2.正则表达式的意义 二、Linux三剑客简介 1.文本处理工具&#xff0c;均支持正则表达式引擎 2.正则表达式分类 3.基本正则表达式BRE集合 4.扩展正则表达式ere集合 三、grep 1.简介 2.实践 3.贪婪匹配 四、sed …...

Zilliz@阿里云:大模型时代下Milvus Cloud向量数据库处理非结构化数据的最佳实践

大模型时代下的数据存储与分析该如何处理?有没有已经落地的应用实践? 为探讨这些问题,近日,阿里云联合 Zilliz 和 Doris 举办了一场以《大模型时代下的数据存储与分析》为主题的技术沙龙,其中,阿里云对象存储 OSS 上拥有海量的非结构化数据,Milvus(Zilliz)作为全球最有…...

解决 react 项目启动端口冲突

报错信息&#xff1a; Emitted error event on Server instance at:at emitErrorNT (net.js:1358:8)at processTicksAndRejections (internal/process/task_queues.js:82:21) {code: EADDRINUSE,errno: -4091,syscall: listen,address: 0.0.0.0,port: 8070 }解决方法&#xff…...

ChatGPT AIGC 总结Vlookup的20种不同用法

Vlookup是Excel中最常见的函数。接下来我们让ChatGPT,AIGC总结Vlookup函数的用法 。 1. 基本的VLOOKUP用法:=VLOOKUP("John", A2:B5, 2, FALSE)。在A2:B5范围中查找"John",返回与"John"在同一行的第2列的值。例如,查找员工姓名,返回员工ID。…...

Android Logcat 命令行工具

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、日常用法3.1 面板介绍3.2 日志过滤…...

蓝桥等考Python组别八级004

第一部分:选择题 1、Python L8 (15分) 运行下面程序,输出的结果是( )。 i = 1 while i <= 3: print(i, end = ) i += 1 1 20 1 2 31 2 30 1 2正确答案:C 2、Python L8...

selenium-webdriver 阿里云ARMS 自动化巡检

很久没更新了&#xff0c;今天分享一篇关于做项目巡检的内容&#xff0c;这部分&#xff0c;前两天刚在公司做了部门分享&#xff0c;趁着劲还没过&#xff0c;发出来跟大家分享下。 一、本地巡检实现 1. Selenium Webdriver(SW) 简介 Selenium Webdriver&#xff08;以下简称…...

【数据仓库设计基础(二)】维度数据模型

文章目录 一. 概述二. 维度数据模型建模过程三. 维度规范化四. 维度数据模型的特点五. 维度数据模型1. 星型模式1.1&#xff0e;事实表1.2&#xff0e;维度表1.3&#xff0e;优点1.4&#xff0e;缺点1.5&#xff0e;示例 2. 雪花模式2.1&#xff0e;数据规范化与存储2.2&#x…...

【数据结构】排序算法(一)—>插入排序、希尔排序、选择排序、堆排序

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.直接插入排序 2.希尔排序 3.直接选择排…...

基于JAVA+SpringBoot的新闻发布平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着科技的飞速发展和…...

Java实现word excel ppt模板渲染与导出及预览 LibreOffice jodconverter

Java Office 一、文档格式转换 文档格式转换是office操作中经常需要进行一个操作&#xff0c;例如将docx文档转换成pdf格式。 java在这方面有许多的操作方式&#xff0c;大致可以分为内部调用&#xff08;无需要安装额外软件&#xff09;&#xff0c;外部调用&#xff08;需…...

【通意千问】大模型GitHub开源工程学习笔记(2)

使用Transformers来使用模型 如希望使用Qwen-chat进行推理,所需要写的只是如下所示的数行代码。请确保你使用的是最新代码,并指定正确的模型名称和路径,如Qwen/Qwen-7B-Chat和Qwen/Qwen-14B-Chat 这里给出了一段代码 from transformers import AutoModelForCausalLM, Aut…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...