静态全局变量
特性
1. 存放空间:存放在全局数据区 从声明时开始初始化main函数结束销毁
2. 初始化:如果没有初始化则会被默认初始化为0 在首次用到时进行初始化
3. 作用域:作用域为整个源文件,
4. 区别:和全局变量的区别是 静态全局只在声明它的整个文件有效
而在文件之外是不可见的 而全局变量是文件之间共享的
例子
#include
using namespace std;
static int n; //定义静态全局变量
void fn()
{
n;
cout<<n<<endl;
}
int main(void)
{
n = 20;
cout<<n<<endl;
fn();
return 0;
}
静态局部变量
特性
1. 存放空间:存放在全局数据区 从声明时开始初始化main函数结束销毁
2. 初始化:如果没有初始化则会被默认初始化为0 在首次用到时进行初始化
3. 作用域:作用域为整个函数内部,
4. 区别:通常但随着程序退出函数体,系统就会收回栈内存,
局部变量也相应失效。
但有时候我们需要在两次调用之间对变量的值进行保存。
通常的想法是定义一个全局变量来实现。但这样一来,
变量已经不再属于函数本身了,
不再仅受函数的控制,给程序的维护带来不便。
例子
#include
using namespace std;
void fn();
int main(void)
{
fn();
fn();
fn();
return 0;
}
void fn()
{
static int n = 10;
cout<<n<<endl;
n;
}
静态函数
特性
静态函数只是在声明他的文件当中可见,不能被其他文件所用。
静态成员变量
特性
1.存放空间:存在全局数据区
不管定义多少个类对象,静态数据成员都共享分配在全局数据区的内存,所以节省了存储空间。
2.初始化:静态局部变量必须初始化 如果没有初始化会出现未定义引用的错误 而且必须在类外初始化
.静态成员变量在类中仅仅是声明,没有定义,编译器暂时不会给它分配内存
所以要在类的外面定义,实际上是给静态成员变量分配内存。
静态数据成员初始化的格式:<数据类型><类名>::<静态数据成员名>=<值>
3.作用域:
静态成员变量从类被加载开始到类被卸载,一直存在;
普通成员变量只有在类创建对象后才开始存在,对象结束,它的生命期结束;
静态成员变量是全类共享;普通成员变量是每个对象单独享用的;
一旦某变量需要改变时,只要改变一次,则所有存款类对象的该变量全改变过来了。
4.区别:
静态成员变量和全局变量的区别:
同全局变量相比,使用静态数据成员有两个优势:
(1)静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性;
(2)可以实现信息隐藏。静态数据成员可以使private成员,而全局变量不能。
5.访问方式:
(1)可以通过类名直接访问变量
(2)可以通过对象名访问比变量
实例
静态成员函数
特性
1.作用域:全类共享
2.调用限制:不包含this指针 只能调用静态成员 不能调用普通成员
3.调用方式:静态成员函数主要为了调用方便不用生成对象就能调用
实例