👑个人主页:啊Q闻
🎇收录专栏:《C++》
🎉我自会去见我的山
💡感谢阅读,欢迎关注,点赞,收藏,评论💡
前言
这篇博客主要是关于类和对象的知识,主要包括初始化列表,隐式类型转换,静态成员变量,友元类。类和对象还有一些内容在【C++】类和对象(上)-优快云博客 【C++】类和对象(中)-优快云博客
大家感兴趣也可以看看哦。
一. 初始化列表
1.初始化列表基本知识
概念:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个“成员变量”后面跟一个放在括号中的初始值或表达式。
1.初始化列表的本质可以理解为每个对象中成员定义的地方
2.成员变量既可以在函数体内初始化,也可以在初始化列表中初始化,但是建议在初始化列表中初始化,因为对于自定义类型成员,不管我们写不写初始化列表,编译器都会先走初始化列表。
3.每个成员变量在初始化列表中只能出现一次【本质是初始化只能初始一次,在构造函数体内可以多次赋值】。
使用方式如图:
成员变量既能在函数体内初始化,也能在初始化列表中初始化,那是不是代表二者作用完全相同呢?
其实并不是,当类中包含以下成员时,必须放在初始化列表中进行初始化:
1.引用成员变量(必须在定义时初始化)
2.const成员变量(必须在定义时初始化)
3.没有默认构造的自定义类型成员
三种情况如下:
2.初始化顺序
1.程序在执行时,无论初始化列表存在不存在,对于在自定义类型其都是先走初始化列表,再走函数体,所以我们在实践中,尽可能用初始化列表初始化,不方便再使用函数体初始化。
2.初始化列表的初始化顺序是按照声明的顺序进行。
二.隐式类型转换
构造函数不仅可以构造与初始化对象,对于接受单个参数的构造函数还具有类型转换的作用。
1.单参数构造函数
编译器进行的优化:
当我们不希望隐式转换发生,我们就要用explicit修饰
2.多参数构造函数
三.静态成员变化
静态区变量,静态区函数不存在对象中,不走初始化列表。所以我们如何对静态区变量初始化呢?
静态区变量属于整个类,属于所有对象
四.友元类
当我们在一个函数中想要使用另外一个函数的私有成员,我们就可以使用友元,友元是单向的,且友元不具有交换性。