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 };
  • 相关阅读:
    家庭养花秘笈1000问
    生活中来3000例·健康篇
    生命的奥秘百科(套装共10册)
    海军陆战队6:太空战舰
    历史文明探秘百科(套装共10册)
    中医养生知识读本
    上工养生话刮痧
    古法艾灸
    钻井液处理剂及其作用原理
    重金属污泥处理技术与管理
  • 原文地址:https://www.cnblogs.com/cplinux/p/5610938.html
Copyright © 2011-2022 走看看