【C++】构造函数之初始化列表(Initialization list of constructors)

举报
人才程序员 发表于 2023/10/29 20:35:56 2023/10/29
【摘要】 @TOC 前言本节是对构造函数的进一步的学习:初始化列表本节是对构造函数的进一步的学习:初始化列表提示:以下是本篇文章正文内容,下面案例可供参考 一、初始化与赋值的区别是什么?大概的意义:1.初始化是一个变量或者对象产生之时就赋予一个初始值,伴随性质2.赋值是一个变量或者对象产生之后的任意时刻可以赋予一个值,随意性质在代码上讲:基本数据类型没什么区别 如:int a = 10;//初...

@TOC


前言

本节是对构造函数的进一步的学习:初始化列表

本节是对构造函数的进一步的学习:初始化列表


提示:以下是本篇文章正文内容,下面案例可供参考

一、初始化与赋值的区别是什么?

大概的意义:
1.初始化是一个变量或者对象产生之时就赋予一个初始值,伴随性质
2.赋值是一个变量或者对象产生之后的任意时刻可以赋予一个值,随意性质

在代码上讲:
基本数据类型没什么区别 如:

int a = 10;//初始化
int b;
b=100;//赋值

数组,结构体 初始化和赋值的形式不同 但是都差不多 如:

struct Node
{
	int a;
}
//初始化
Node no={10};
//赋值
Node no;
no.a=10;//其中,指针成员用"->"
//数组
//初始化
int a[5]={1,2,3,4,5};
//赋值
int b[5];
b[0]=1;//数组的赋值使用下标

引用,const 他们很特殊,只能初始化,不能赋值 如:

const a=10;
a=12;//C3892

int &d;//C2530

二、初始化列表的形式顺序和执行时机

1.初始化列表的形式

函数名 () + : 变量名(要初始化的值)
在花括号之前
注意:如有多个变量需要初始化,则在变量前面加","

class nn
{
public:
	const int a;
	char b;

	nn() :a(10)//函数名 () + : 变量名(要初始化的值)
	{

	}

	nn(char a):b(a),a(10)//如有两或者两个以上的成员,中间用","隔开
	{

	}
};

2.初始化列表的作用

1.和构造函数的区别

1.基本数据类型,用哪个都行
2.引用,const必须用初始化列表 要不然会报错

2.对数据成员初始化的方式

1.可通过数值对数据成员初始化
2.可通过构造函数参数对数据成员进行初始化
3.可通过成员之间相互初始化 注意:成员初始化的顺序
4.初始化的方式很多,根据自己的需要用

3、执行顺序

在构造函数之前初始化
如:创建对象->构造函数中的初始化列表->构造函数主体

4、注意点

多个构造函数,初始化列表绑定所在的构造函数

三、数组和结构体怎么使用初始化列表

1.数组

在括号里不用写东西cc():a()
则a的所有元素为0
和memset是一样的

vc++无效果 但是visual studio有效果

class a
{
public:
	int b[5];
	a():b()
	{
		//b的所有元素都为0  和memset是一样的
	}
}

2.结构体

结构体可以直接赋值
使用初始化列表反而增加了操作的难度


总结

本节课主要讲了初始化与赋值的区别、 初始化列表的形式、 初始化列表的作用、 初始化列表和构造函数执行的先后顺序、 数组和结构体如何使用初始化列表


希望各位下去好好复习,这是类的一个很重要的东西:初始化列表

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。