zoukankan      html  css  js  c++  java
  • c++ static理解

    最近在做c++选修课的论文,发现自己对很多基础的东西掌握的还是不好,比如在设计单件模式时用到的static静态变量时就遇到了些纠结的问题

    1~~~static定义类中的属性时

    1 class Single
    2     {
    3 
    4         public:
    5                         static int a;
    6         };
    7 Single::a = 1;

    使其变量为1.如果不设置初值的话默认为0,并且其值可以在任意地方修改

    int main(){
         Single s1;
         Single s2;
         std::cout<<Single::a<<s1.a<<s2.a;          //输出全部为1
         Single::a = 2;        
         std::cout<<Single::a<<s1.a<<s2.a;          //输出全部为2
         s1.a = 3;        
         std::cout<<Single::a<<s1.a<<s2.a;          //输出全部为3
         s2.a = 4;        
         std::cout<<Single::a<<s1.a<<s2.a;          //输出全部为4
         return 0;       
    }

    所以说其值可以在任意地方修改,当然首先也必须为public的。说明static物如其名,是静态的

    意思就是他在程序运行时只占一块内存空间,不是在每个类里都有一个副本

    2~~~static在定义类的函数类型时

    同static变量一样,他只存在一个内存,并且在程序运行初创建,所以他不可能访问到个个对象的属性,即不存在this指针

    所以在她的函数体内只能操作static的函数或者变量

    同时他也可以在没有类的初始化时用     类名::函数名(); 来进行操作~~这个大家都懂的。。不解释了

    3~~~在函数中定义static

    在类的函数中定义static的静态变量时

    void classname::functionname(int sta){
        static int s = sta; //只执行一次,即只在第一次定义,并划分内存空间,但是在函数执行完后还存在,所以不是在栈上申请的内存
        cout<<s;
    }
    int main(){
      classname c;
      c.functionname(2);  //输出2;
      c.functionname(3);  //没错~~还是输出2
      return 0;
    }

    上面的代码可以看出函数内定义的static变量只定义一次,且有一定的隐藏性(只能在这个函数体内操作)

  • 相关阅读:
    HDU 5313 bitset优化背包
    bzoj 2595 斯坦纳树
    COJ 1287 求匹配串在模式串中出现的次数
    HDU 5381 The sum of gcd
    POJ 1739
    HDU 3377 插头dp
    HDU 1693 二进制表示的简单插头dp
    HDU 5353
    URAL 1519 基础插头DP
    UVA 10294 等价类计数
  • 原文地址:https://www.cnblogs.com/happyDays/p/2821530.html
Copyright © 2011-2022 走看看