C++ 构造函数初始化列表
2015-12-23 11:14
274 查看
在如下的类定义中:
以下语句
构造函数的初始化段有一个冒号:开始,紧跟在冒号之后的是需要进行初始化的数据成员,然后是由一对小括号括起来的初始值。在本例中,我们将数字0用一对小括号括起来,将其作为数据成员c的初值。这也是初始化const类型数据成员的唯一方法。
初始化列表仅在构造函数中有效,不能用于其他函数。构造函数的初始化列表可以初始化任何数据成员,但const类型数据成员不能用其他办法进行初始化。
class C{ private: int x; const int c; public: C(){ x = 0; //OK, x not const c = 0; //***** ERROR: c is const } };类C的构造函数通过赋值语句对该类的两个数据成员进行初始化。但由于数据成员c是const类型的,因此对其作出的赋值操作室非法的。只要为构造函数添加一个初始化列表就可以解决这个问题。
以下语句
class C{ private: int x; const int c; public: C():c(0){ x = -1; } };列举了构造函数初始化列表的使用方法。
构造函数的初始化段有一个冒号:开始,紧跟在冒号之后的是需要进行初始化的数据成员,然后是由一对小括号括起来的初始值。在本例中,我们将数字0用一对小括号括起来,将其作为数据成员c的初值。这也是初始化const类型数据成员的唯一方法。
初始化列表仅在构造函数中有效,不能用于其他函数。构造函数的初始化列表可以初始化任何数据成员,但const类型数据成员不能用其他办法进行初始化。
class C{ private: int x; const int c; public: C():c(0),x(-1){} //empty body };本例将const数据成员c和非const数据成员x都放在初始化段中。请注意数据成员的初始化顺序完全取决于它们在类当中声明的次序,与它们在初始化段当中出现的次序无关。本例中,由于数据成员x在c之前声明,因此尽管x在初始化段中比c后出现,但x的初始化仍然先于c。
相关文章推荐
- C++构造函数
- effective c++学习笔记
- C++头文件包含问题-Include和class **
- 【学习笔记】C++传递字符串到C#
- Windows下C++多线程同步与互斥简单运用
- C/C++ 常用字符串函数
- 在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)
- C语言内存与指针总结
- 帮 C/C++ 程序员彻底了解链接器
- C++得到当前进程所占用的内…
- C++遍历文件夹下的所有文件
- 亲自动手~用VC++做DLL
- 亲自动手~用VC++做DLL
- C++ 使用std::getline()拆分字符串
- C++学习
- C++ 使用ifstream和getline读取文件内容
- 【C++ STL应用与实现】26: 如何使用std::for_each以及基于范围的for循环 (since C++11)
- Effective C++: 流操作.
- Effective C++: member function as a array.
- 魔兽世界终极版(C++程序设计第6周)