0
点赞
收藏
分享

微信扫一扫

C++ ---->再谈构造函数(升级版)_01

----->构造函数体赋值

---->初始化 -->前奏

各位好友, 下面函数体 对类 对象 赋初始值 行为, 是不可以称为 初始化成员对象 !

因 初始化行为有且只能有一次, 而函数体类 -->内部赋值 可以多次进行 !

C++ ---->再谈构造函数(升级版)_01_再谈构造函数

---->初始化 -->开启

#include <iostream>
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 << _year << " - " << _month << " - " << _day << endl << endl;
  }
private:
  int _year;
  int _month;
  int _day;
};

int main()
{
  Date d1;
  d1.Print();
	return 0;
}


为了好友们, 有更好地观感体验, 与更好地理解 ! 现 附上有彩色的代码图样 :>

C++ ---->再谈构造函数(升级版)_01_再谈构造函数_02

----->解析 初始化列表 :>

---->初始化列表 :以一个冒号开始, 接着 以一个逗号进行分割 --->数据成员列表, 每一个 “成员变量” 后面跟着一个放在括号中的初始化值或者表达式 !


下面,进行 最为重要的特性 分析 :>

1. 每一个成员变量在初始化列表中只能出现一次(初始化有且只能初始化一次)

2. 类中成员, 必须放在初始化列表位置进行初始化:>

A. 引用成员变量;

B. const 成员变量;

C. 自定义类型成员(且该类中没有默认构造函数)

----->验证 初始化列表特性 :>

C++ ---->再谈构造函数(升级版)_01_再谈构造函数_03


----->优化版本 :>

C++ ---->再谈构造函数(升级版)_01_升级进化版_04


---->调试环节 :>

C++ ---->再谈构造函数(升级版)_01_初始化列表 特性分析_05

C++ ---->再谈构造函数(升级版)_01_初始化列表 特性分析_06

各位好友,此处的 自定义类型对象, 博主无法打印出来 !但还是, 能经过调试直观反映出来 !

----->此处 自定义类型对象, 没有默认构造函数, 需要进行赋值操作;有默认构造函数的前提下, 会去调用它自己的默认构造函数 !

------>初始化列表优先级高于缺省值 

---->验证 :>

C++ ---->再谈构造函数(升级版)_01_初始化列表 特性分析_07

C++ ---->再谈构造函数(升级版)_01_再谈构造函数_08

各位好友, 上述代码模块, 请注意 --->标注区域 !

---->有关于 “ ret ” 随机值 ! 好友们 !可以这么想 -->既然 指针都有野指针, 那么引用也可以有 “ 野引用 ”

其实, 这只是为了方便理解, 特别起了这么一个 “ 叫法 ”😊

关于 出现随机数值 --->其实, 回归本质, 是出现了栈区销毁, 即 指向的对象, 所处的空间遭到释放。 当再一次出现访问, 这时, 就会出现随机值 !这同, 前期比较 引用 与传值 --->差异性 --->结果相似 !

----->下面继续推进 ---->特性分析 :>

特性 3 :

对于自定义类型成员而言, 会优先使用 初始化列表 !

----->如下 :>

C++ ---->再谈构造函数(升级版)_01_升级进化版_09


特性 4 :

成员变量在类中声明次序 是其在初始化列表中的初始化顺序, 与其在初始化列表中的先后次序无关  !

----->如下 :>

--->模块 一 :

C++ ---->再谈构造函数(升级版)_01_升级进化版_10


----->调整私有域 --->成员变量顺序 : >

--->模块 二 :

C++ ---->再谈构造函数(升级版)_01_初始化列表 特性分析_11


各位好友, 经过调整成员变量次序后,运行结果发生了很大变化 !本来是 随机值的 成员变量 “ _aa2 ”变成了正常化的值 !现在 解释这种情况转变 :>  

对于模块 一 , 调试顺序, 先指向 成员变量 “ _aa2  ” 而 _aa2 值显示, 又同表达式 “ _aa2(_aa1) ” 有关

此表达式  --->赋值拷贝  ! 那么问题来了, _aa1 值是多少? 显然, 成员变量 _aa2 值还没有被创建, 在调试过程中 自动 被内存(系统)附上了随机值 !之后, 类 A 创建对象 aa 并且 传值 --给-->构造函数 参数部分

而当 调试开始指向 _aa1(aa) 时候, 显然, 形参 aa 10 会被拷贝给 成员变量 _aa1 , 将 _aa1 一开始 的随机值 变成 了 10

各位好友, 上述解释 !能否符合 好友们理解 !😊 其实本质上--->运用了  拷贝构造函数 --->特性 !如果, 有部分好友, 对拷贝构造存在些许不理解! 可 自行查看前几期博文 !这些新颖的知识点 --->曾 重点梳理 !

那里,有好友要找寻的答案 !

好了,好友们, 本期博文 梳理完毕!希望,大家 可以得到新的体验 与收获 !

下一期, 继续推进 本模块 --->再谈构造函数 ---->静态区 与友元函数 引入  

-------->期待再相会 !😊😊


举报

相关推荐

0 条评论