—–>构造函数体赋值
—->初始化 –>前奏
各位好友, 下面函数体 对类 对象 赋初始值 行为, 是不可以称为 初始化成员对象 !
因 初始化行为有且只能有一次, 而函数体类 –>内部赋值 可以多次进行 !
—->初始化 –>开启
#include
using std::cout;
using std::endl;
// 初探 函数体赋值 --->初始化列表
class Date
{
public:
Date(int year = 2018, int month = 05, int day = 07)
:_year(year)
,_month(month)
,_day(day) // 要注意格式书写
{}
void Print()
{
cout
为了好友们, 有更好地观感体验, 与更好地理解 ! 现 附上有彩色的代码图样 :>
—–>解析 初始化列表 :>
—->初始化列表 :以一个冒号开始, 接着 以一个逗号进行分割 —>数据成员列表, 每一个 “成员变量” 后面跟着一个放在括号中的初始化值或者表达式 !
下面,进行 最为重要的特性 分析 :>
1. 每一个成员变量在初始化列表中只能出现一次(初始化有且只能初始化一次)
2. 类中成员, 必须放在初始化列表位置进行初始化:>
A. 引用成员变量;
B. const 成员变量;
C. 自定义类型成员(且该类中没有默认构造函数)
—–>验证 初始化列表特性 :>
—–>优化版本 :>
—->调试环节 :>
各位好友,此处的 自定义类型对象, 博主无法打印出来 !但还是, 能经过调试直观反映出来 !
—–>此处 自定义类型对象, 没有默认构造函数, 需要进行赋值操作;有默认构造函数的前提下, 会去调用它自己的默认构造函数 !
——>初始化列表优先级高于缺省值
—->验证 :>
各位好友, 上述代码模块, 请注意 —>标注区域 !
—->有关于 “ ret ” 随机值 ! 好友们 !可以这么想 –>既然 指针都有野指针, 那么引用也可以有 “ 野引用 ”
其实, 这只是为了方便理解, 特别起了这么一个 “ 叫法 ”😊
关于 出现随机数值 —>其实, 回归本质, 是出现了栈区销毁, 即 指向的对象, 所处的空间遭到释放。 当再一次出现访问, 这时, 就会出现随机值 !这同, 前期比较 引用 与传值 —>差异性 —>结果相似 !
—–>下面继续推进 —->特性分析 :>
特性 3 :
对于自定义类型成员而言, 会优先使用 初始化列表 !
—–>如下 :>
特性 4 :
成员变量在类中声明次序 是其在初始化列表中的初始化顺序, 与其在初始化列表中的先后次序无关 !
—–>如下 :>
—>模块 一 :
—–>调整私有域 —>成员变量顺序 : >
—>模块 二 :
各位好友, 经过调整成员变量次序后,运行结果发生了很大变化 !本来是 随机值的 成员变量 “ _aa2 ”变成了正常化的值 !现在 解释这种情况转变 :>
对于模块 一 , 调试顺序, 先指向 成员变量 “ _aa2 ” 而 _aa2 值显示, 又同表达式 “ _aa2(_aa1) ” 有关
此表达式 —>赋值拷贝 ! 那么问题来了, _aa1 值是多少? 显然, 成员变量 _aa2 值还没有被创建, 在调试过程中 自动 被内存(系统)附上了随机值 !之后, 类 A 创建对象 aa 并且 传值 –给–>构造函数 参数部分
而当 调试开始指向 _aa1(aa) 时候, 显然, 形参 aa 值 10 会被拷贝给 成员变量 _aa1 , 将 _aa1 一开始 的随机值 变成 了 10 !
各位好友, 上述解释 !能否符合 好友们理解 !😊 其实本质上—>运用了 拷贝构造函数 —>特性 !如果, 有部分好友, 对拷贝构造存在些许不理解! 可 自行查看前几期博文 !这些新颖的知识点 —>曾 重点梳理 !
那里,有好友要找寻的答案 !
好了,好友们, 本期博文 梳理完毕!希望,大家 可以得到新的体验 与收获 !
下一期, 继续推进 本模块 —>再谈构造函数 —->静态区 与友元函数 引入
——–>期待再相会 !😊😊
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net