C++static字段
1  全局变量
全局变量申明之前冠以static 就构成了静态的全局变量。
全局变量本⾝就是静态存储⽅式,静态全局变量当然也是静态存储⽅式。
全局变量和静态全局变量相同点:
⼆者都存储在全局区。
全局变量(⼩)和静态全局变量(⼤)的作⽤域不同:
⾮静态全局变量的作⽤域是整个源程序,当⼀个源程序由多个源⽂件组成时,⾮静态的全局变量在各个源⽂件中都是有效的。
静态全局变量的作⽤域是只在定义该变量的源⽂件内有效,在同⼀源程序的其它源⽂件中不能使⽤它。由于静态全局变量的作⽤域局限于⼀个源⽂件内,只能为该源⽂件内的函数公⽤,因此可以避免在其它源⽂件中引起错误。
2  局部变量
静态局部变量使⽤static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区。
3  函数
函数的使⽤⽅式与全局变量类似,在函数的返回类型前加上static,就是静态函数。其特性如下:
静态函数只能在声明它的⽂件中可见,其他⽂件不能引⽤该函数
不同的⽂件可以使⽤相同名字的静态函数,互不影响
4  ⾯向对象
A.  静态数据成员
在类内数据成员的声明前加上static关键字,该数据成员就是类内的静态数据成员。
其特点如下:
static修饰的变量1)静态数据成员存储在全局数据区,静态数据成员在定义时分配存储空间,所以不能在类声明中定义。
2)静态数据成员是类的成员,⽆论定义了多少个类的对象,静态数据成员只有⼀个,且对该类的所有对象可见。也就是说任⼀对象都可以对静态数据成员进⾏操作。⽽对于⾮静态数据成员,每个对象都有⾃⼰的⼀份拷贝。
3)静态数据成员也遵从public, protected, private访问规则。
由于上⾯的原因,静态数据成员不属于任何对象,在没有类的实例时其作⽤域就可见,在没有任何对象时,就可以进⾏操作。
同全局变量相⽐,使⽤静态数据成员有两个优势:
静态数据成员没有进⼊程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性。
可以实现信息隐藏。静态数据成员可以是private成员,⽽全局变量不能
B.  静态成员函数
与静态数据成员类似,静态成员函数属于整个类,⽽不是某⼀个对象。
其特性如下:
静态成员函数没有this指针,它⽆法访问属于类对象的⾮静态数据成员,也⽆法访问⾮静态成员函数,它只能调⽤其余的静态成员函数。
⾮静态成员函数可以任意地访问静态成员函数和静态数据成员。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。