c++中类的静态数据成员

有时需要为某个类的所有对象分配一个单一的存储空间,这个存储空间只是被这个类的对象访问,其他人不能访问,那么这时静态的成员变量是有用的。例如下面用来统计一共创建了多少个对象的变量num

class classVar{
   static int num;
public:
    classVar(){num++;}
    ~classVar(){num--;}
    int getNum(){return num;}
};
int object::num = 0;
int main(){
   classVar var1;
   {
     classVar var2
     cout<<var2.getNum()<<endl;
   }
    cout<<var1.getNum()<<endl;


}

 在类内部,static int num;算是静态成员变得声明,而其定义时在int object::num=0;处。如果我们在类内部static int num处直接赋值,编译器会报错,说只有常量才能在类内部初始化,即只有const  static int num=0;这种形式的才能在类内部初始化。

在vs2013中,const int num=0;在类内部也是正确的。

虽然const int num可以在类内部直接初始化,但请注意,有时候我们希望每一个对象的const int num的值不相同,那么此时const int num就应该在构造函数初始化列表中初始化。

 还有一个要记住,数组(arrays),不是整形的静态常量,以及非静态的必须要在外部初始化

 1 class Values{
 2 static const int scSize=100;//静态常量,而且是整形数
 3 static const long scLong=100;
 4 
 5 staitc const int scInts[];//数组不能在类内部初始化
 6 static const long scLongs[];
 7 static const float scTables[];
 8 static const char scLetters[];
 9 
10 
11 static int size;//非const的静态整形常量不能在类内部初始化
12 
13 
14 static const float scFloat;//静态常量,非integral不能在类内部初始化
15 
16 };
原文地址:https://www.cnblogs.com/cplinux/p/5610938.html