zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    Unity NGUI 3.0.4版本 制作网络版斗地主
    unity3D与网页的交互---做项目的一点总结
    Cross-platform Tools
    Win7下Qt5的安装及使用
    VS Installer教程
    C++ & MFC
    论文模板的定制
    批处理文件
    MFC六大关键技术
    C/C++常用预处理指令
  • 原文地址:https://www.cnblogs.com/cplinux/p/5610938.html
Copyright © 2011-2022 走看看