今天遇到关于类的静态成员变量相关的BUG,复习一下这方面的知识,稍微记录下:
在 C++ 中
static 关键字最基本的用法是:
1、被 static 修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要 new 出一个类来
2、被 static 修饰的方法属于类方法(即函数),可以通过类名.方法名直接引用,而不需要 new 出一个类来
被 static 修饰的变量、被 static 修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。
在 C++ 中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。
静态成员的定义或声明要加个关键词 static。静态成员可以通过双冒号来使用即 <类名>::<静态成员名>。
类似 ConfigApp::appName 这样使用。
在类的静态成员函数中使用类的非静态成员。
#include <stdio.h>
class Point
{
public:
void init()
{
}
static void output()
{
printf("%d\n", m_x);
}
private:
int m_x;
// static int m_x = 111; //编译通过
};
void main()
{
Point pt;
pt.output();
}
因为静态成员函数output()在类实例化对象之前就已经分配空间了,而类的非静态成员m_x必须在类实例化对象后才有内存空间,所以这个调用就出错了,就好比没有声明一个变量却提前使用它一样。
// static int m_x = 111; //编译通过
这样修改就将m_x也放在类实例化时一起分配空间了,输出111;
网友评论