【C++奇遇记】构造函数 | 初始化列表

news2024/11/25 5:52:18

🎬 博客主页:博主链接
🎥 本文由 M malloc 原创,首发于 CSDN🙉
🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述
在这里插入图片描述

文章目录

  • 😇本章详情
  • 😇初始化列表的前情介绍
    • 😇尽量先使用初始化列表初始化
    • ✉初始化列表的顺序
  • 📃如何巩固学习
  • 📃本文小结

😇本章详情

🐤本篇文章将讲授C++的初始化列表相关的知识

😇初始化列表的前情介绍

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

class Date
{
public:
	Date(int year, int month, int day)
		:_year(year)
		,_month(month)
		,_day(day)
	{}
private:
	int _year;
	int _month;
	int _day;
};


在这里插入图片描述


注意
1、每个成员变量在初始化中只能出现一次(初始化只能初始化一次)
2、类包含一下成员,必须放在初始化列表位置进行初始化:

  1. 引用成员变量
  2. const成员变量
  3. 自定义类型成员(且该类没有默认构造函数时)
class AA
{
public:
   AA(int a)
   	:_a(a)
   {}
private:
   int _a;
};
class B
{
public:
   B(int a, int ref)
   	:_aobj(a)
   	, _ref(ref)
   	, _n(10)
   {}
private:
   AA _aobj;  // 没有默认构造函数
   int& _ref;  // 引用
   const int _n; // const 
};

😇尽量先使用初始化列表初始化

前言

📝尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。

class Time
{
public:
    Time(int hour = 0)
        :_hour(hour)
    {
        cout << "Time()" << endl;
    }
private:
    int _hour;
};
class Date
{
public:
    Date(int day)
    {}
private:
    int _day;
    Time _t;
};
int main()
{
    Date d(1);
}

✉初始化列表的顺序

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


来看一道题目吧!

class A
{
public:
    A(int a)
       :_a1(a)
       ,_a2(_a1)
   {}
    
    void Print() {
        cout<<_a1<<" "<<_a2<<endl;
   }
private:
    int _a2;
    int _a1;
};
int main() {
    A aa(1);
    aa.Print();
}
A. 输出1  1
B.程序崩溃
C.编译不通过
D.输出1  随机值

答案是选D滴,那么为什么呢?

在初始化列表中,初始化的顺序是按照私有成员定义的顺序来看的,我们发现_a2,的顺序在_a1的顺序之前,所以先用随机值_a1进行初始化_a2,所以a2是随机值,然后现在再传值进行初始化_a1,所以_a1是输出1

📃如何巩固学习

提示:在学习的过程中,我们需要先自行进行思考,并且多去阅读一些大佬的书籍,俗话说的好,书籍是人类进步的阶梯!

📃本文小结

  1. C++鼓励程序员在开发程序时使用多个文件。一种有效的组织策略是,使用头文件来定义,为操纵用户类型的函数提供函数原型;并将函数定义放在一个独立的源代码文件中。头文件和源代码文件一起定义和实现了用户定义的类型及其使用方式。最后,将main()和其他使用这些函数的函数放在第三个文件中。

好啦今日的分享到这里就结束啦,我是爱你们的M malloc希望可以帮助到你们噢,最后别忘记三连啦!!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

LeetCode:Hot100python版本之回溯

回溯算法其实是纯暴力搜索。for循环嵌套是写不出的 组合&#xff1a;没有顺序 排列&#xff1a;有顺序 回溯法可以抽象为树形结构。只有在回溯算法中递归才会有返回值。 46. 全排列 78. 子集 17. 电话号码的字母组合 39. 组合总和 22. 括号生成 79. 单词搜索 ​​​​​​13…

剪枝基础与实战(3): 模型剪枝和稀疏化训练流程

Model Pruning 相关论文:Learning Efficient Convolutional Networks through Network Slimming (ICCV 2017) 考虑一个问题,深度学习模型里面的卷积层出来之后的特征有非常多,这里面会不会存在一些没有价值的特征及其相关的连接?又如何去判断一个特征及其连接是否有价值? …

Android学习之路(7) Frament

Fragment 表示应用界面中可重复使用的一部分。fragment 定义和管理自己的布局&#xff0c;具有自己的生命周期&#xff0c;并且可以处理自己的输入事件。fragment 不能独立存在。它们必须由 activity 或其他 fragment 托管。fragment 的视图层次结构会成为宿主的视图层次结构的…

2023国赛数学建模C题思路模型代码 高教社杯

本次比赛我们将会全程更新思路模型及代码&#xff0c;大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

【Keil软件 ST-Link下载问题】:提示ST-Link需要升级,但是升级之后会报错:Upgrade Error, Please try again.

项目场景&#xff1a; 报错&#xff1a; 平常一直使用J-link&#xff0c;一直没有问题&#xff0c;今天使用了一下ST-Link发现了问题&#xff0c;下载不进去。 并且提示我需要升级ST-Link&#xff0c;我按照规定的升级&#xff0c;但是依然报错。 下面是我的心路历程&#xff…

JDK中的Timer总结

目录 一、背景介绍二、思路&方案三、过程1.Timer关键类图2.Timer的基本用法3.结合面向对象的角度进行分析总结 四、总结五、升华 一、背景介绍 最近业务中使用了jdk中的Timer&#xff0c;通过对Timer源码的研究&#xff0c;结合对面向对象的认识&#xff0c;对Timer进行针…

简单认识Docker数据管理

文章目录 为何需要docker数据管理数据管理类型 一、数据卷二、数据卷容器三、容器互联 为何需要docker数据管理 因为数据写入后如果停止了容器&#xff0c;再开启数据就会消失&#xff0c;使用数据管理的数据卷挂载&#xff0c;实现了数据的持久化&#xff0c;重启数据还会存在…

合宙Air724UG LuatOS-Air LVGL API--运行

硬件准备 可以使用 724A13 开发板 ST7735S 屏幕 或者 iCool 开发板 软件准备 底层固件 底层固件需要支持 LVGL&#xff0c;通常选用的固件是 LuatOS-Air_VXXXX_RDA8910_BT_FLOAT.pac。 当然&#xff0c;您也可以通过 更新说明 选择支持 LVGL 的其他底层版本。 脚本 首先需要…

垂类模型大有前景,但AGI却给自己“挖了个坑”

巨量模型是个“坑”&#xff0c;但垂直模型不是。 数科星球原创 作者丨苑晶 编辑丨大兔 2023年4月&#xff0c;GPT-5的相关消息引起了一阵轰动。彼时&#xff0c;人们对巨量大模型既有期待、也有恐惧。更有甚者&#xff0c;认为人类历史或许将因此而画上终止符。 但很快&#…

Java并发编程之线程池详解

目录 &#x1f433;今日良言:不悲伤 不彷徨 有风听风 有雨看雨 &#x1f407;一、简介 &#x1f407;二、相关代码 &#x1f43c;1.线程池代码 &#x1f43c;2.自定义实现线程池 &#x1f407;三、ThreadPoolExecutor类 &#x1f433;今日良言:不悲伤 不彷徨 有风听风 有…

基于 BEM 规范实现简单的全局 scss

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 BEM 是 css 常用的命名规范BEM &#xff1a;block(块)、 element(元素)、 modify(修饰符)以 namespace-block__element、namespace-block---modify 格式…

【es6】中的Generator

Generator 一、Generator 是什么&#xff1f;1.1 与普通函数写法不一样&#xff0c;有两个不同 二、Generator 使用2.1 书写方法 三、yield语句3.1 yield和return3.2 注意事项3.3 yield*语句3.4 yield*应用 四、next方法4.1参数 总结 一、Generator 是什么&#xff1f; Genera…

[Go版]算法通关村第十三关青铜——数字数学问题之统计问题、溢出问题、进制问题

这里写自定义目录标题 数字统计专题题目&#xff1a;数组元素积的符号思路分析&#xff1a;无需真计算&#xff0c;只需判断负数个数是奇是偶复杂度&#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目&#xff1a;阶乘尾数0的个数思路分析&am…

字节实习半年小感悟

实习差不多半年了&#xff0c;快要答辩了。 从开始准备答辩到现在差不多四五十天的时间&#xff0c;虽然做需求和答辩交替进行&#xff0c;但PPT已经修改迭代六七个版本了。 以前总觉得这句话是一句非常感性非常搞笑的话&#xff1a;“xx的智慧如同天上的皓月&#xff0c;我不…

嵌入式设备的 Json 库基本使用

大家好&#xff0c;今天给介绍一款基于 C 语言的轻量级的 Json 库 – cJson。可用于资源受限的嵌入式设备中。 cJSON 是一个超轻巧&#xff0c;携带方便&#xff0c;单文件&#xff0c;简单的可以作为 ANSI-C 标准的 JSON 解析器。 cJSON 是一个开源项目&#xff0c;github 下…

【Linux取经路】探索进程状态之僵尸进程 | 孤儿进程

文章目录 一、进程状态概述1.1 运行状态详解1.2 阻塞状态详解1.3 挂起状态详解 二、具体的Linux操作系统中的进程状态2.1 Linux内核源代码2.2 查看进程状态2.3 D磁盘休眠状态(Disk sleep)2.4 T停止状态(stopped) 三、僵尸进程3.1 僵尸进程危害总结 四、孤儿进程五、结语 一、进…

【线性代数-3Blue1Brown】- 4 矩阵乘法与线性变换复合

飞书原文档&#xff1a; https://fvcs2dhq8qs.feishu.cn/docx/QRfNdiRAcoaSn0xLSIrcv1W0n9f?fromfrom_copylink

【教程】华南理工大学校园网登录抓包和协议模拟

每次手动登录特别麻烦&#xff0c;而且时不时断一下&#xff0c;因此搞个脚本让它定时监测、断开重连比较方便。这里不讲这个脚本怎么写&#xff0c;只记录一下登录时的抓包内容。 蒜了&#xff0c;直接上解析吧&#xff0c;也不复杂&#xff0c;相信大家一目了然。 目录 抓包…

Linux命令200例:tail用来显示文件的末尾内容(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

Java开发面试题 | 2023

Java基础 接口和抽象类的区别&#xff1f;Java动态代理HashMap 底层实现及put元素的具体过程currenthashmap底层实现原理&#xff1f;map可以放null值吗&#xff0c;currenthashmap为什么不能放null值synchronze和reetrantlock区别&#xff1f;怎样停止一个运行中的线程&#…