c++中类的静态数据成员
Posted 阿瞒123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 };
以上是关于c++中类的静态数据成员的主要内容,如果未能解决你的问题,请参考以下文章