关于C++类的静态成员变量
感觉类静态成员变量这里初始化的位置略混乱,在这整理下
静态成员是单独存储的,不是对象的组成部分。
静态成员变量
不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存。1
2
3
4
5
6class StringBad
{
private:
static int num_strings;
...
};
静态成员变量是在方法文件中进行初始化,若刚在头文件中初始化会造成多个初始化语句引发错误。1
2
3
4// 类方法定义的文件中
include "string_bad.h"
// 初始化静态成员函数
int StringBad::num_string = 0;
初始化语句指出了变量类型,并使用了作用于运算符::
,但没有使用关键字static
。
例外
当静态成员变量是const
整数类型或者枚举类型时,是可以在类声明中进行初始化的,1
2
3
4
5
6class StringBad
{
private:
static const int LEN = 10;
enum Mode {UP, LOW};
};
总结:
静态数据成员在类声明中声明,在包含类方法的文件中进行初始化。初始化的时候使用作用域运算符来指出静态成员所属的类。
但如果静态成员是
const
或是枚举类型,则可以在类声明中进行初始化。