【C++】深入了解构造函数之初始化列表

目录

一、再谈构造函数

1、引入

1)构造函数体赋值

2)不同成员变量赋值

2、初始化列表


一、再谈构造函数

1、引入

1)构造函数体赋值

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。

虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量 的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始 化一次,而构造函数体内可以多次赋值。 

2)不同成员变量赋值

_a1,_a2 可以通过调用默认构造函数;const _x无法调用默认构造函数,因为const 对象必须在定义位置初始化。aa是对整个类对象的定义,有些成员需要特殊处理,无法都满足,编译失败。因此,必须给每个成员变量找一个定义的位置,不然像const 这样的成员不好处理。

👉 C++给出的解决方案是,在构造函数里定义一个初始化列表。👈️

2、初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟 一个放在括号中的初始值或表达式。

⚠【注意】⚠

1) 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)

2) 类中包含以下成员,必须放在初始化列表位置进行初始化:

   ✅引用成员变量

   ✅const成员变量

   ✅自定义类型成员(且该类没有默认构造函数时) 

【知识回顾】

默认构造函数有三种:
⭕无参的构造函数

⭕全缺省的构造函数

⭕编译器生成的默认构造函数

总的特征就是不用传参就可以使用的函数。默认构造函数只能有一个。

3)尽量使用初始化列表初始化

因为不管你是否使用初始化列表,对于自定义类型成员变量, 一定会先使用初始化列表初始化。而且所有成员都会经过初始化列表,因为这是成员定义的地方。

对象整体的定义,每个成员通过初始化列表定义,如果初始化列表没有给定值,内置类型就用缺省值定义,如果缺省值也没有定义,就是随机值;自定义类型调用构造函数。如果初始化列表给了值就直接用初始化列表数据,或者函数体内部初始化。

4)成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关 

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

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

相关文章

世邦spon IP网络对讲广播系统任意文件上传漏洞

产品介绍 世邦通信IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统存在任意文件上传漏洞,攻击者可以通过构造特殊请求包上传恶意后门文件,从…

深入理解 Flink(一)Flink 架构设计原理

大数据分布式计算引擎设计实现剖析 MapReduce MapReduce 执行引擎解析 MapReduce 的组件设计实现图 Spark 执行引擎解析 Spark 相比于 RM 的真正优势的地方在哪里:(Simple、Fast、Scalable、Unified) DAG 引擎中间计算结果可以进行内存持…

掌握设计模式:深入了解命令模式的优雅调度与行为解耦

命令模式是一种行为设计模式,其目的是将请求发送者和接收者解耦,从而允许发送者发送请求,而无需知道请求的具体处理方式。在命令模式中,请求被封装为一个对象,这个对象包含了执行请求所需的所有信息,包括调…

解析器:request.body、request.POST、request.data

request.POST与request.body: django中的request.POST只能取到Content-Type(请求头)为application/x-www-form-urlencoded(form表单默认格式)的数据,如果请求头为application/json(json格式),multipart/form-data(文件)等格式无法取到&#x…

世邦通信SPON IP网络对讲广播系统未授权访问

产品介绍 世邦通信SPON IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统getuserdata.php存在未授权访问漏洞,攻击者可通过该漏洞在服务器端读取账户密码…

软件工程各种图

参考视频: 6 分钟学会 UML 类图_哔哩哔哩_bilibili 5 分钟学会 UML 时序图(顺序图、序列图)_哔哩哔哩_bilibili 3 分钟学会 UML 活动图_哔哩哔哩_bilibili 6 分钟学会 UML 用例图_哔哩哔哩_bilibili 是真的讲的非常好!&#…

Aloha 机械臂的学习记录3——AWE:Pycharm运行代码记录

之前的博客创作了三偏关于Aloha_AWE的liunx终端指令运行代码的示例: Aloha 机械臂的学习记录——AWE:Bimanual Simulation Suite: https://blog.csdn.net/qq_54900679/article/details/134889183?spm1001.2014.3001.5502 Aloha 机械臂的学习记录1——AWE&#x…

Python 与 PySpark数据分析实战指南:解锁数据洞见

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 数据分析是当今信息时代中至关重要的技能之一。…

免费运维工具测评——深入使用牧云主机管理助手

作为一名运维,宝塔,Nezha 监控面板,WinSCP,Termius 都用过了,谈一下自己的感受: 安装绑定 微信扫码可直接登录,主页简洁清晰,即使是个人体验版也没有任何广告。 只需要复制命令在服…

基于神经网络的手写汉字提取与书写评分系统研究

相关源码和文档获取请私聊QQ:3106089953 论文目录结构 目 录 摘 要 I Abstract II 目 录 IV 第1章 绪论 1 1.1. 研究背景与意义 1 1.2. 国内外研究现状 2 1.2.1. 文本定位技术研究现状 2 1.2.2. 手写汉字识别研究现状 3 1.2.3. 汉字书写质量评价方法研究现状 4 1.3. 本文所做工…

Linux驱动开发(1)-最简单的字符设备驱动开发例子

1.简介 字符设备驱动:按照字节流进行读写操作的设备,例如点灯、按键、IIC、SPI、LCD。 Linux系统中一切皆文件,驱动加载成功,就会在/dev目录生成文件,对文件操作,则可实现对硬件操作。应用程序运行在用户…

Leetcode242有效的字母异位词(java实现,详细易懂想学会的进!!!)

今天给大家分享的题目是leetcode242有效的字母异位词 我们先看题目描述: Chatgpt中对于字母异位词的解释如下: 字母异位词是指由相同的字母组成但顺序不同的单词。换句话说,字母异位词具有相同的字母,只是排列顺序不同。 简单的将…

华云安攻击面发现及管理平台体验

省流: 无需【立即咨询】即可体验,开通即可查看演示数据,公开报价 界面: 界面简洁,要点清晰,可以清晰的看到暴露面及攻击面信息 功能: 资产发现:主域名发现、子域名发现、 IP 发现…

Set和Map

一、Set的介绍 1.1、Set相关文档介绍 cplusplus.com/reference/set/set/?kwset 1. set是按照一定次序存储元素的容器 2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。 set中的元素不能在容器中修改…

时空序列问题的本质和底层逻辑

本质:Still need to polish this. 底层逻辑:Still need to polish this.See you pretty soon. Reference 【时空序列预测】什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?_mb62b92582e5a0a的技…

【算法刷题】Day28

文章目录 1. 买卖股票的最佳时机 III题干:算法原理:1. 状态表示:2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 代码: 2. Z 字形变换题干:算法原理:1. 模拟2. 找规律 代码: 1. 买卖股票的最佳时…

我是如何从计算机小白成长为技术专家的(上)?

作为一名程序员,我想大家接触最多的是计算机吧,但是一个从没有接触过计算机的小白,又是如何走上程序员的道路的呢。 农村的孩子,早当家 作为农村出身的孩子,且家里条件也不是非常的好,在我那个年代&#…

Linux网络配置与抓包工具介绍

目录 一、配置命令 1. ifconfig 1.1 概述信息解析 1.2 常用格式 2. ip 2.1 ip link 数据链路层 2.2 ip addr 网络层 2.3 路由 3. hostname 3.1 临时修改主机名 3.2 永久修改主机名 4. route 5. netstat 6. ss 7. ping 8. traceroute 9. nslookup 10. 永久修…

springcloud Config配置中心

简介 服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。 SpringCloud提供了ConfigS…

Android SDK环境搭建

一、Android SDK简介 SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。 因此,Android SDK 指的是Android专属的软件…