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变量只定义一次,且有一定的隐藏性(只能在这个函数体内操作)

原文链接: https://www.cnblogs.com/happyDays/archive/2012/12/17/2821530.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/72786

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午3:35
下一篇 2023年2月9日 下午3:35

相关推荐