C++初始化列表
2016-04-17 00:10
316 查看
构造函数的执行阶段
初始化阶段
计算阶段
构造函数初始化类的成员的两种方式
问已经有了第一种初始化方式为什么还要使用初始化列表
哪些东西必须放在初始化列表中
1. 注意:初始化阶段先于计算阶段。
使用初始化列表
引用类型,引用必须在定义的时候初始化,并且不能重新赋值
没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。网络上有人是这么说,我没懂,理论上不实现构造函数,编译器会自动添加构造函数的,应该不存在真正意义上的无构造函数的类
实验代码:
实验结果:
初始化阶段
计算阶段
构造函数初始化类的成员的两种方式
问已经有了第一种初始化方式为什么还要使用初始化列表
哪些东西必须放在初始化列表中
构造函数的执行阶段:
1. 初始化阶段:
所有类类型的成员都会在初始化阶段初始化,即使该成员没有出现在构造函数的初始化列表中2. 计算阶段:
一般用于执行构造函数体内的赋值操作1. 注意:初始化阶段先于计算阶段。
构造函数初始化类的成员的两种方式:
在构造函数体内进行赋值操作使用初始化列表
问:已经有了第一种初始化方式,为什么还要使用初始化列表?
答:主要是基于性能问题,使用初始化列表少了一次调用默认构造函数的过程哪些东西必须放在初始化列表中?
常量成员,因常量只能初始化不能赋值引用类型,引用必须在定义的时候初始化,并且不能重新赋值
没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。网络上有人是这么说,我没懂,理论上不实现构造函数,编译器会自动添加构造函数的,应该不存在真正意义上的无构造函数的类
实验代码:
#include <iostream> using namespace std; class Class_0 { public: Class_0(){ cout<<"in Class_0"<<endl; } void print(){ cout<<"in Class_0 print"<<endl; } }; class Class_1 { public: Class_0 cls; /** * @brief Class_1 * 会调用一次Class_0的构造函数 */ Class_1(Class_0 value){ cls = value; cout<<"in Class_1"<<endl; } }; class Class_2 { public: Class_0 cls; /** * @brief Class_2 * 不会调用Class_0的构造函数 */ Class_2(Class_0 value):cls(value){ cls = value; cout<<"in Class_2"<<endl; } }; class TestConst { public: const int num; /** * @brief TestConst * 不使用初始化列表会报错 error: uninitialized const member in 'const int' [-fpermissive] */ TestConst(int &value):num(value){ // num = value; cout<<"num="<<num<<endl; } }; class TestReference { public: int # /** * @brief TestReference * 不使用初始化列表会报错 In constructor 'TestReference::TestReference(int&)': */ TestReference(int &value):num(value){ // num = value; cout<<"num="<<num<<endl; } }; void test1(Class_0 &class_0) { cout<<"----------"<<endl; Class_1 class_1(class_0); class_1.cls.print(); cout<<"----------"<<endl; Class_2 class_2(class_0); class_2.cls.print(); } int main() { Class_0 class_0; /*测试使用初始化列表是否真的不调用参数类的构造函数*/ test1(class_0); int num = 100; cout<<"----------"<<endl; TestConst testConst(num); cout<<"----------"<<endl; TestReference testReference(num); return 0; }
实验结果:
in Class_0 ---------- in Class_0 in Class_1 in Class_0 print ---------- in Class_2 in Class_0 print ---------- num=100 ---------- num=100
相关文章推荐
- Android Native 绘图方法
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- C#中struct和class的区别详解
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记