1.1 const 变量作为类的成员函数 1.1.1 const 变量作为类的成员函数示例代码
class Test { private: const int a; public: Test(int i):a(i) // 通过初始化列表的形式对const 只读变量进行初始化 { } }; int main() { Test t1(10); return 0; }总结:通过代码实例,我们可以看出const 只读变量作为类的成员函数的时候只能通过初始化列表的形式对const只读变量进行初始化。
1.1.2 初始化和赋值的区别
我理解的是,在类中,在初始化列表中的就是初始化,而在构造函数的函数体内进行的就是赋值: Test():c(1) ======>初始化 Test(){int a =10} =====>这就是赋值注意初始化和赋值两者的区别
初始化 : 对正在创建的对象进行初值的设置 (注意对象正在创建)赋值 : 对已经存在的对象进行值设置(注意对象已经存在) int i =10 ; //初始化 int b ; b =10; //赋值 初始化和赋值的比较 struct Test { private: const int ci; int j; public: Test(int i,int j) :ci(i) //对i初始化 { this->j = j; //对j赋值 } Test():ci(10),j(20) //对i,j初始化,而不是赋值 { } void print() { printf("ci=%d,j=%d\n",ci,j); } }; int main() { Test t(1,2); t.print(); Test t2; t2.print(); return 0; }1.1.3 注意事项
成员的初始化与成员的声明顺序相同成员的初始化顺序与初始化列表中位置无关初始化列表先于构造函数的函数体执行。1.1.4 初始化列表的代码实例
#include <stdio.h> #include <string.h> #include <stdlib.h> class Value { private: int v; public: Value(int v) { this->v =v; printf("value =%d\n",v); } }; class Test { private: const int a; Value v2; Value v1; Value v3; public: Test(int i,int j,int k ,int m):a(i),v1(j),v2(k),v3(m) { printf("Test()\n"); } }; int main() { Test t1(1,1,2,3); return 0; }结果: value =2; value =1; value =3; 结果再次证明了,初始化顺序与变量的声明顺序有关。
1.2 类中的const 成员再分析
类中的const成员被分配空间类中的const 成员的本质是只读变量类中的const成员只能在初始化列表中指定初始值注意:编译器无法直接得到const成员的初始值,因此无法进入符号表成为真正意义上的常量
1.3 对象的构造顺序 1.3.1
局部对象的构造顺序依赖于程序的执行流堆对象的构造顺序依赖于new的使用顺序全局对象的构造顺序是不确定的参考一 :狄泰软件学院C++进阶剖析 如有侵权:请联系邮箱 1986005934@qq.com