test

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

 

posted @ 2012-12-17 22:24  フ天天好心情  阅读(187)  评论(0编辑  收藏  举报