C++回顾之类数据成员的初始化

论坛 期权论坛 期权     
趣味C语言CPP   2019-6-30 05:29   2206   0

类数据成员的初始化,这份工作主要是构造函数负责的,构造函数的职责之一就是对数据成员进行正确初始化。实际上,构造函数的执行过程主要有两个阶段:

        (1)初始化阶段

        (2)普通计算阶段

        初始化阶段是指对数据成员的初始化主要在构造函数的初始化列表中进行。普通计算阶段是指对数据成员的初始化是在构造函数的函数体中进行。因此,初始化阶段与普通计算阶段是两个不同的概念,需要予以区分。下面来看看什么是构造函数的初始化列表。

        下面是一个时钟类Clock的定义:



下面是Clock的构造函数实现:



面代码中的“:”号后面的代码就是构造函数的初始化列表,也就是构造函数执行的第一阶段,利用构造函数的初始化列表来对数据成员的初始化其效率是更高的,其实在函数体内执行的代码在某种意义上来说,不能称为初始化,是赋值操作,是构造函数的普通计算段,它的效率更低。构造函数的初始化列表中,如果有多个数据成员,成员之间则以逗号分隔。

        我们这里说的数据成员,包含普通数据类型的数据成员,如int,double, char等,还有类对象的数据成员,const数据成员以及引用数据成员。对数据成员的初始化我们建议在构造函数的初始化列表中。而对于下面几种情形而言是必须要在构造函数的初始化列表中进行的:

        (1) 类对象成员,当它所对应的类没有默认构造函数时,只能在构造函数的初始化列表中进行(如果有默认构造函数,虽然可以不在初始化列表中进行,考虑到效率的问题,不建议在普通计算段中初始化)

        (2) const成员,其初始化也只能在构造函数的初始化列表中进行

        (3) 引用成员, 其初始化也只能在构造函数的初始化列表中进行

        声明一下:数据成员的初始化顺序,与构造函数的初始化列表中的顺序无关,与在类中声明的成员顺序有关。
        下面是示例:




这里需要指出的是,对于const成员,不同的对象有不同的const值,obj1的kNum为100,obj2的kNum为200,如果想让所有对象均有一个共同的常量值,不能用const,而应该使用枚举型,如上述代码中的TYPE_A, TYPE_B;
在看完文章的同时别忘了点一下再看、转发一下支持小编哦!

扫描下方的微信二维码
关注公众号
领取上课地址、项目源码以及更多学习资料!


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:30
帖子:6
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP