最近在做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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!