白话C++ 类的静态成员变量(方法)

今天遇到关于类的静态成员变量相关的BUG,复习一下这方面的知识,稍微记录下:

在 C++ 中
static 关键字最基本的用法是:

1、被 static 修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要 new 出一个类来
2、被 static 修饰的方法属于类方法(即函数),可以通过类名.方法名直接引用,而不需要 new 出一个类来
被 static 修饰的变量、被 static 修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。

在 C++ 中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。

静态成员的定义或声明要加个关键词 static。静态成员可以通过双冒号来使用即 <类名>::<静态成员名>。
类似 ConfigApp::appName 这样使用。

在类的静态成员函数中使用类的非静态成员。

#include   
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;

你可能感兴趣的:(白话C++ 类的静态成员变量(方法))