C++语言中的细节_1
来源:互联网 发布:全景展示系统源码 编辑:程序博客网 时间:2024/06/05 16:43
//C++ Primer 第12章 笔记
在构造函数的函数体中对类成员进行赋值,而非初始化。
class A{ private: string s; int i; public: A(){s=NULL;}};
此时,在构造函数的函数体中对类成员s进行的s=NULL是赋值行为,而非初始化行为。
初始化是在初始化列表中进行的,即使初始化列表未给出,也会根据变量类型调用该类型的默认构造函数来初始化。
如 A():s(NULL){}与A(){}是等价的。因为第二个构造函数会调用string类的默认构造函数来初始化s;
但是,const或引用类型数据成员必须通过初始化列表进行初始化。
内置和符合类型的成员(如int类型,此例中的A类,指针和数组),只对定义在全局作用域的对象才初始化。当对象定义在局部作用域中时,内置或复合类型的成员不进行初始化。
如:
int main(){ A a;}
此时,a.i是没有被初始化的。如果把a.i输出,则会有意想不到的结果。
除了作为赋值的目标之外,以任何方式使用一个未定义的成员都是错误的。如输出上例的a.i。
一个类哪怕之定义了一个构造函数,编译器也不会再生成默认构造函数。
static数据成员必须在类定义体的外部定义。
类的static成员,像普通数据成员一样,不能在类的定义体中初始化。
如下:
class B{ static int i; //OK:在类中声明 static int j=1; //ERROR:在类中初始化 int n=1; //ERROR:在类中初始化};int B::i=1; //OK:在类定义体的外部定义并初始化
例外:在要初始化式是一个常量表达式,整形const static 数据成员就可以在类的定义体中进行初始化。
注意:const static 数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体外进行定义。但不必要指定初值。
如:
class C{ const static int a=1;};int C::i;
- C++语言中的细节_1
- C语言指针细节_1
- C语言中的小细节
- c语言中的一些细节
- C语言_1
- c语言细节中的文件归类代码
- 第五节 C语言中的细节
- 01 C语言中的一些细节
- C/CPP语言中的语法细节
- 重学c语言_1
- C语言通信录_1
- c 语言细节
- c语言细节
- C语言细节问题
- C语言细节
- C语言细节
- C 语言细节
- C语言细节
- Dos命令总结
- 结构体操作
- 学习PLS_INTEGER,BINARY_INTEGER,INTEGER,NUMBER的概念及区别以及在性能方面的差异
- 【Unity Shaders】Diffuse Shading——创建一个基本的Surface Shader
- android SQliteDatabase 数据的更新问题
- C++语言中的细节_1
- 一个概率算法问题
- linux实现简单 PPPOE服务器
- 云计算关键技术
- 1.传统电梯调度算法
- 电脑报2013年第7期
- Ural 1519
- GMM与EM算法(二)
- HDU--杭电--2103--Family planning--水题