前言
本节是对构造函数的进一步的学习:初始化列表
本节是对构造函数的进一步的学习:初始化列表
提示:以下是本篇文章正文内容,下面案例可供参考
一、初始化与赋值的区别是什么?
大概的意义:
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.结构体
结构体可以直接赋值
使用初始化列表反而增加了操作的难度
总结
本节课主要讲了初始化与赋值的区别、初始化列表的形式、初始化列表的作用、初始化列表和构造函数执行的先后顺序、数组和结构体如何使用初始化列表
希望各位下去好好复习,这是类的一个很重要的东西:初始化列表