类和对象(5)--《Hello C++ Wrold!》(7)--(C/C++)--构造函数的初始化列表,explicit关键词,友元,内部类和匿名对象
文章目录
- 构造函数的初始化列表
- explicit关键字
- static成员
- 友元
- 友元函数
- 友元类
- 内部类
- 匿名对象
- 编译器对连续构造的优化
- 作业部分:
构造函数的初始化列表
初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。
(初始化列表是构造函数的一部分)
添加位置:在构造函数的{}前面
Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) {}
只要调用了构造函数,都会走一次初始化列表,没有的话,就走隐式初始化列表
隐式初始化列表的规则:
对于内置类型,高级的编译器会初始化其为默认值(比如int的搞成0)
对于类类型(即对象成员):
如果该类型有默认构造函数,则会调用默认构造函数;如果没有默认构造函数且未显式初始化,则编译错误。
注意:每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
类中包含以下成员,必须放在初始化列表位置进行初始化:(成员是private时)
1.引用成员变量
2.const成员变量
(因为引用成员变量和const成员变量的特征是必须在定义时初始化)
3.自定义类型成员(且该类没有默认构造函数时)
(引申:自定义类型没有放入初始化列表的话,会先调用默认构造函数再去类的构造函数里面)
当然,初始化列表里也可以写其他的成员变量,比如内置类型,这些一般也建议写到初始化列表里面,很少,比如:赋值不单纯,有检验啥的才在函数内容里搞
初始化列表 声明那里搞缺省值 构造函数里面赋值的优先级: 初始化列表会搞的话,缺省值用不上;再进去函数里面 初始化列表搞不上的话,用缺省值,再进去函数里面
提议:
建议变量声明的顺序和初始化列表的顺序保持一致
因为:成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关
class A { public: A(int a) :_a1(a) ,_a2(_a1) {} void Print() { cout
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。