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