C++初始化列表

news/2024/11/28 0:37:04/

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.ppmy.cn/news/65355.html

相关文章

探索数字化转型新道路!流辰信息微服务与您一起创未来!

科技在进步&#xff0c;社会在发展&#xff0c;办公自动化也在高速发展中。数字化转型是当下企业获得长久发展的趋势之一&#xff0c;在信息瞬间万变的社会中&#xff0c;谁掌握了核心技术&#xff0c;谁能与时代同步&#xff0c;谁就能开启新的康庄大道&#xff0c;谁就能在转…

【单目标优化算法】孔雀优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

OpenCV-Python图像阈值

目录 简单阈值 自适应阈值 Otsu的二值化 所谓的图像阈值&#xff0c;就是图像二值化&#xff0c;什么是二值化&#xff0c;就是只有0和1&#xff0c;没有其他的。在OpenCV的图像里面&#xff0c;二值化表示图像的像素为0和255&#xff0c;并没有其他的值&#xff0c;它跟灰度…

02. 路由的定义和控制器

学习要点&#xff1a; 1.路由的定义 2.创建控制器 本节课我们来开始进入学习路由模块&#xff0c;然后简单了解控制器的创建。 一&#xff0e;路由的定义 1. 什么是路由&#xff1f;路由就是提供接受 HTTP 请求的路径&#xff0c;并和程序交互的功能&#xff1b; 2. 简单点理解…

多元统计分析-主成分分析的原理与实现

目录 一、什么是主成分分析&#xff1f; 二、主成分分析的原理 三、主成分分析的应用 四、使用sklearn实现主成分分析 五、总结 一、什么是主成分分析&#xff1f; 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种常用的多元统计分…

css布局——flex布局知识点总结(青蛙游戏)

文章目录 学习网址推荐align-items、justify-content合并使用左右分布和垂直end flex-directionrowrow-reversecolumncolumn-reserse横向逆转并水平start垂直列并从末尾排列逆向垂直列并左右排列水平居中&#xff0c;垂直end&#xff0c;横向逆向 order、align-selforder改变排…

Group相关问题-组内节点限制移动范围

1.在节点中定义dragComputation,限制节点的移动范围 注意事项 组节点不定义go.Placeholder ,设置了占位符后组内节点移动将改变组节点位置dragComputation中自定义stayInGroup计算规则是根据groupNode的resizeObject计算 如果开启了resizable:true,建议指定其改变大的零部件r…

《素未谋面》 - 王忻辰

哭过之后还怎么装傻 长发侧脸迷人的脸颊 分手之后没问候的话 怕你误会尴尬 是我犯贱受到了惩罚 脑海中重复你的情话 我们种下的花 要不然扔了吧 感情的画面不过是 彼此之间深深浅浅 动人心弦的语言 悲情的剧本不过是 缠缠绵绵 字字句句都可怜 你妆扮的鲜艳 换上了高跟鞋 陌生的…