C++初始化列表

news2024/12/24 10:21:40

1.初始化列表概述

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

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

class SS
{
public:
	SS(int c = 0)
	{
		_c = c;
	}
private:
	int _c;

};

class S
{
public:
	S(int a = 0,int b=0)
	{
		_a = a;
		_b = b;
	}
private:
	int _a;
	int _b;
	//const int _f;
	
	SS _d;
};
int main()
{
	S s1;
	return 0;
}

如果在定义使使用的是内置类型,则内置类型需要调用默认构造函数,如果是自定义类型,则需调用自定义类型的默认构造函数,如果调用自定义类型的默认构造函数,虽然调用了,但是默认构造函数的初始化只是赋初值,并不是初始化。上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。

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

  • 引用成员变量
  • const成员变量
  • 自定义类型成员(且该类没有默认构造函数时)

const修饰的类型和引用成员变量必须使用成员变量,因为这两个成员在定义的时候必须初始化,所以一定要使用初始化列表,不能用其他的

比如这样

 如果不使用初始化列表,则系统会出问题。

然后来看自定义类型的初始化

class SS
{
public:
	SS(int c,int k,int h)
	{
		_c = c;
		_h = h;
		_k = h;

	}
private:
	int _c;
	int _h;
	int _k;


	
};
class S
{
public:
	S(int a = 0, int b = 0, int d = 0, int j = 0,int f=0,int k=0)
		:_a(a)
		, _b(b)
		,_d(j,f,k)
	{
		;
	}
private:
	int _a;
	int _b;
	
	SS _d;
};
int main()
{
	S s1;
	
	return 0;
}

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

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

比如:

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();
}

运行结果:

 所以,一定要注意初始化列表的顺序,否则程序就会出现意想不到的bug。

 

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

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

相关文章

个人电脑操作系统

UEFI&#xff08;Unified Extensible Firmware Interface&#xff0c;全称统一的可扩展固件接口&#xff09;是一种个人电脑系统规格&#xff0c;用来定义操作系统与系统固件之间的软件界面&#xff0c;作为BIOS的替代方案。其前身是Intel在1998年开始开发的Intel Boot Initiat…

【static_cast、reinterpret_cast、const_cast、dynamic_cast】C++类型转换

C类型转换 引入C语言中的类型转换 C的强制类型转换static_castreinterpret_catconst_castdynamic_cast向下转型的安全问题 explicit4种类型转换的应用场景 RTTI 引入 C语言中的类型转换 C语言和C都是强类型语言&#xff0c;如果赋值运算符左右两侧变量的类型不同&#xff0c;…

ChatGPT一键私有部署,全网可用,让访问、问答不再受限,且安全稳定!

前言 ChatGPT由于在访问上有一些限制&#xff0c;使用并不便利。目前国内可以直接访问的大部分是调用API返回结果&#xff0c;我们去使用时总会有次数限制&#xff0c;而且它们可能随便崩掉。 其实&#xff0c;目前我们访问过的大部分国内的网页包括UI&#xff0c;其实是套用了…

过滤器对前端请求参数进行解码URLDecoder,接口接收参数类型为map,解码无效问题

文章目录 一、前言二、设计思路三、代码实现四、启动测试五、过滤器解码无效六、源码跟踪七、解决方案八、再次重启测试九、总结 一、前言 最近做的一个公司项目&#xff0c;因为客户需要对特殊字符做搜索&#xff0c;但是前端的请求参数无法传递到后端&#xff0c;所以前端对…

VS2017中Qt项目数据库连接——包含报错比如QMYSQL driver not loaded(细心看到最后,一定能解决你想解决的问题)

我把爆的错误QMYSQL driver not loaded写在文章末尾了&#xff0c;大家看一看&#xff01;前面是配置数据库 一、测试 VS2017 中 Qt 项目数据库连接 打开 VS2017&#xff0c;文件——新建项目&#xff0c;右侧输入框输入 Qt 确定后点击下一步&#xff0c;勾选模块 基类也是默…

RSU路测单元,你知道多少?

一、什么是RSU路测单元&#xff1f; RSU路测单元是实现智慧的路、车路协同的关键设备&#xff0c;设置在路侧&#xff0c;与附近过往车辆进行双向通信、交互数据&#xff0c;是智能交通系统中的一种重要设备。RSU可以连接路面原有电子设备&#xff0c;比如信号灯和摄像头&…

一文解决Xshell无法连接vmware上的centos

问题描述 win10系统上安装VMware workstation16 pro&#xff0c;装好后安装centos虚拟机&#xff0c;在设置network & hostname时选择的NAT模式&#xff0c;即使用自定义的网关和IPv4地址&#xff0c;最后配置完成后centos主机地址信息如下&#xff0c;在虚拟机内部进行pi…

【一览无余】Vue框架下Cesium加载遥感地图使用GeoServer切割TIF大文件对外发布WMS服务进行地图绘制(科普篇2/2)

【一览无余】Vue框架下Cesium加载遥感地图使用GeoServer切割TIF大文件对外发布WMS服务进行地图绘制&#xff08;科普篇2/2&#xff09; 二、Cesium是弄啥嘞2.1 WebGL2.1.1 WebGL是什么2.1.2 WebGL优点 2.2 Cesium是什么2.3 Cesium能干什么2.4 Cesium相关工具有哪些2.5 相关案例…

Echarts 3D散点图

文章目录 以下是一个 html echarts的案例 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>ECharts 3D Scatter Plot Demo</title><!-- 引入 ECharts --><script src"https://cdnjs.cloudflare.com/…

急吗?光急可没用呀!满满干货,两小时速成,别搁那干瞪眼了!

全球产业链加速重构&#xff0c;各种不确定性加大&#xff01;数字经济规模不断提升&#xff0c;为企业转型与发展创造大量机会&#xff01;企业亟须以数字化为工具或手段&#xff0c;再造组织流程和业务流程&#xff0c;以数字化确定性应对外部环境变化的不确定性&#xff0c;…

中检集团:把数智化转型作为“1号工程”

2018年4月&#xff0c;中国检验认证集团&#xff08;以下简称“中检集团”&#xff09;启动信息化建设“1号工程”&#xff0c;5年时间&#xff0c;从“数字中检1.0”升级到“2.0”再到“2.1”“2.2”&#xff0c;中检集团在数智化转型过程中&#xff0c;可谓是打了一场攻坚战。…

智能ai文章伪原创工具-智能ai文章原创处理系统

智能AI文章伪原创工具 您好&#xff0c;智能AI文章伪原创工具是一种通过机器学习和自然语言处理技术&#xff0c;帮助用户生成“看起来像是”原创文章的人工智能工具。该工具的原理是将原始文章分解为各个句子和段落&#xff0c;然后对其中的一些单词、短语或句子进行修改或替…

MySQL高级(进阶)SQL语句

#显示一个字段或者多个字段的所有内容 SELECT “字段” FROM 表名 &#xff1b; #distinct对字段去重查询 &#xff08;最好只对单个字段进行去重&#xff09; SELECT DISTINCT 字段名 FROM 表名 #where 有条件查询 SELECT “字段” FROM 表名 WHERE 条件&#xff08;例如&a…

安卓开发:使用可为null性

Kotlin园地 地址&#xff1a;Kotlin 园地 | Android 开发者 | Android Developershttps://developer.android.google.cn/training/kotlinplayground?hlzh-cn 以下简称 “K园” 先在K园执行以下代码&#xff1a; fun main() {var fa: String "sandra on";prin…

服务攻防-协议漏洞-FTPRDPSSHRsyncProFTPDlibsshOpenssh-Hydra工具使用口令猜解未授权访问

目录 一、导图 二、口令猜解-Hydra-FTP&RDP&SSH 1、协议介绍 2、Hydra工具介绍 3、实例演示 三、配置不当-未授权访问-Rsync 文件备份 1、Rsync介绍 2、漏洞成因——配置不当 3、实例演示 四、协议漏洞-应用软件-FTP&ProFTPD搭建 1、引入 2、ProFTPD介…

IDEA 搭建 Maven模块化项目

目录 1.前言 2. 软硬件环境 3.项目搭建 3.1.创建 SpringBoot 父项目 3.2. 构建子项目centerdao 3.3. 构建子项目centerweb 4. 建立父子 Module 依赖 4.1 删除不必要文件 4.2.修改 Parent 项目 packaging 4.3.修改子项目pom.xml 信息 4.4. 补充说明 5. 项目继承关系…

ios15及以上webview、Safari使用Websocket断连,1006无清晰错误码

文章目录 问题表现&#xff1a;定位疑似原因&#xff1a;解决方式&#xff1a;定位问题思路过程记录&#xff1a;1、对比前端代码运行环境问题2、写纯请求前端代码连接&#xff0c;确认是否接口部署服务问题&#xff1b;3、IOS连接是否有对TSL安全协议版本有要求&#xff08;使…

【Java入门合集】第六章异常处理

博主&#xff1a;命运之光 专栏&#xff1a;JAVA入门 学习目标 掌握异常的概念&#xff0c;Java中的常见异常类&#xff1b; 掌握Java中如何捕获和处理异常&#xff1b; 掌握自定义异常类及其使用&#xff1b; 目录 异常概述 异常体系 常见的异常 Java的异常处理机制 方式…

The Certificate Of Harbor On Rancher(2.5.16)

序言 针对Rancher2.5.16版本的情况. 问题是: 当我们创建RancherServcie后,RancherService会在容器内通构建k3s环境,然后k3s去我们的私有Harbor拉取镜像. 问题就在我们虽然在虚拟机上给docker设置了可以不通过Https的方式拉取Hrabor的镜像,但是RancherService中的k3s也会去拉…

Android---bitmap优化

目录 Bitmap 占用内存大小计算 Bitmap | Drawable | InputStream | Byte[] 之间进行转换 Bitmap 相关方法 BitmapFactory 工厂类 Bitmap 占用内存大小计算 Bitmap 作为位图&#xff0c;需要读入一张图片中每一个像素点的数据&#xff0c;其主要占用内存的地方也正是这些像…