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 };
  • 相关阅读:
    VMWARE Linux环境下如何设置共享文件夹?
    linux本地源#如何挂载本地iso镜像作为本地源
    centos7修改系统语言为简体中文
    Redhat镜像-RHEL-官方镜像下载大全
    如何连接到Oracle数据库?
    Oracle 数据库创建导入
    Oracle 12C安装教程
    Oracle 11g安装
    Linux下安装Oracle11g服务器
    Oracle简介
  • 原文地址:https://www.cnblogs.com/cplinux/p/5610938.html
Copyright © 2011-2022 走看看